[@nativescript/firebase-messaging-core][iOS] Notification token is regenerated after app is killed
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- ios, typescript
- 領域
- mobile
調査の方向性
main.ts から開始し、初期化中の firebase().messaging().registerDeviceForRemoteMessages() と getToken() を追跡します。iOS の初回起動とその後の起動を再現し、package.json のパッケージバージョンと 2 つのトークン結果を確認します。初回起動で通知が機能し、アプリの終了と再起動の後も getToken() が安定していれば完了です。
索引モデルが issue の本文から書いたものです。
説明
There is a weird behavior with our app about the notification token in iOS only.
We have search everywhere to find for a fix for this issue but we didn't find anything.
When I launch the first time the app, I get the notification token with firebase().messaging().getToken(), then we save the token in our user database and send notification from our server.
The first time the app is launch, the notification are not received, it only works after killing the app and relaunch it again.
But that's not it!
After the second launch, if I kill the app and then launch it again, the token change!!
firebase().messaging().getToken() is called twice, the first one return the old token and the second one return the new token
According to firebase documentation, the token only change if the app is uninstalled or data is reset which is not the case
package.json:
{
"name": "tina",
"main": "./src/main.ts",
"version": "1.0.0",
"private": true,
"dependencies": {
"@angular/animations": "~14.3.0",
"@angular/common": "~14.3.0",
"@angular/compiler": "~14.3.0",
"@angular/core": "~14.3.0",
"@angular/forms": "~14.3.0",
"@angular/platform-browser": "~14.3.0",
"@angular/platform-browser-dynamic": "~14.3.0",
"@angular/router": "~14.3.0",
"@nativescript/angular": "^14.2.8",
"@nativescript/camera": "^5.1.1",
"@nativescript/core": "~8.5.0",
"@nativescript/firebase-core": "^2.3.4",
"@nativescript/firebase-messaging": "^2.3.4",
"@nativescript/firebase-messaging-core": "^2.3.4",
"@nativescript/geolocation": "^8.3.1",
"@nativescript/imagepicker": "^3.1.1",
"@nativescript/local-notifications": "^6.1.1",
"@nativescript/mlkit-barcode-scanning": "^2.1.0",
"@nativescript/mlkit-core": "^2.1.0",
"@nativescript/theme": "~3.0.2",
"nativescript-webview-interface": "^1.4.5",
"rxjs": "~7.5.0",
"zone.js": "~0.11.5"
},
"devDependencies": {
"@angular-devkit/build-angular": "^14.2.13",
"@angular/compiler-cli": "~14.3.0",
"@nativescript/android": "8.5.0",
"@nativescript/ios": "8.6.4",
"@nativescript/types": "~8.5.0",
"@nativescript/webpack": "5.0.14",
"@ngtools/webpack": "^14.2.13",
"@types/node": "^14.18.63",
"typescript": "^4.6.2"
}
}
main.ts
import { platformNativeScript, registerElement, runNativeScriptAngularApp } from '@nativescript/angular';
import '@nativescript/firebase-messaging'
import { AppModule } from './app/app.module';
import { firebase } from '@nativescript/firebase-core';
import '@nativescript/firebase-messaging';
import { AuthorizationStatus } from '@nativescript/firebase-messaging';
import { setString } from '@nativescript/core/application-settings';
import { requestPermissions } from '@nativescript/camera';
import * as geolocation from '@nativescript/geolocation';
import { isIOS } from "@nativescript/core";
import { MLKitView } from '@nativescript/mlkit-core';
runNativeScriptAngularApp({
appModuleBootstrap: () => platformNativeScript().bootstrapModule(AppModule),
});
try {
registerElement('MLKitView', () => MLKitView);
firebase().initializeApp().then(
() => {
firebase().messaging().requestPermission({
ios: {
alert: true,
},
}).then((p) => {
if(p == AuthorizationStatus.AUTHORIZED || p == AuthorizationStatus.PROVISIONAL){
firebase().messaging().registerDeviceForRemoteMessages();
firebase().messaging().showNotificationsWhenInForeground = true;
firebase().messaging().getToken().then(token => {
setString("notificationToken", token);
})
}
}).finally(() => {
if(isIOS){
requestPermissions().finally(() => { // for camera
geolocation.isEnabled().then((isEnabled) => { //for gps
if(!isEnabled){
geolocation.enableLocationRequest(true).then(() => {
});
}
})
})
}
})
console.log("firebase.init done");
},
error => {
console.log(`firebase.init error: ${error}`);
}
);
}
catch (err) {
console.log("err in try and catch " + err);
}
Let me know if you need something else to provide.
- 主要言語
- TypeScript
- スター
- 62
- フォーク
- 53
- 平均マージ
- 8日 4時間
- マージ済み PR(30日)
- 2
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NativeScript/firebase のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
NativeScript/firebase#292 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
NativeScript/firebase#289 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
NativeScript/firebase#288 · リアクション 4 件 ·
-
bug ios
NativeScript/firebase#287 · 担当者 1 名 ·
-
Uh-Oh Shazam オープン
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
NativeScript/firebase#286 ·
NativeScript/firebase の issue をすべて見る
似ている issue
-
blocklist removal
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MetaMask/eth-phishing-detect#296544 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
pastelsky/bundlephobia#1122 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100