2017-10-16 21 views
0

私のXamarin Androidプロジェクトでリモート通知を実装しようとしています。私はさまざまなガイドにあるステップバイステップの指示に従いましたが、初めての場合でもOnTokenRefreshメソッドが呼び出されることはありません。そのため、私のアプリはトークンを受け取っていないか、あるいはどんなタイプのfirebase登録もしていないようです。Xamarin AndroidでOnTokenRefreshが呼び出されない

  1. 私は私のAndroidアプリにFirebaseを追加し、google-services.json
  2. 私はXamarinのAndroidプロジェクトにgoogle-services.jsonを含まをダウンロードしてGoogleServicesJson
  3. にビルドアクションを設定し、私はAndroidManifest.xml

    <receiver 
    android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" 
    android:exported="false" /> 
    <receiver 
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" 
    android:exported="true" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
        <intent-filter> 
         <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
         <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
         <category android:name="${applicationId}" /> 
        </intent-filter> 
    </receiver> 
    
  4. にこのコードを挿入しています
  5. 拡張クラスを作成しましたFirebaseInstanceIdService

    [Service] 
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })] 
    class FirebaseRegistrationService : FirebaseInstanceIdService 
    { 
    const string TAG = "FirebaseRegistrationService"; 
    
        public override void OnTokenRefresh() 
        { 
         var refreshedToken = FirebaseInstanceId.Instance.Token; 
         System.Diagnostics.Debug.WriteLine(TAG, "Refreshed token: " + refreshedToken); 
    
         MainActivity.CurrentActivity.RunOnUiThread(() => RegisterDeviceOnServer(refreshedToken)); 
        } 
    
        public void RegisterDeviceOnServer(string refreshedToken) 
        { 
         // Custom implementation 
        } 
    } 
    

すでに述べたように、OnTokenRefreshは決して呼び出されません。 私が理解できないのは、誰が有効なトークンを受け取るためにFirebaseの登録をしたのですか? ディレクティブがありませんか? この登録に欠けている方法はありますか? なぜOnTokenRefreshが呼び出されないのですか? this documentによれば

+0

FirebaseAppの初期化に失敗しましたか? https://stackoverflow.com/a/42159446/4984832 – SushiHangover

+0

MainActivityでは 'FirebaseApp.InitializeApp(this);'を実行しますが、このJava例外を返します: "Java.Lang.IllegalStateException:デフォルトのFirebaseAppはこのプロセスで初期化されていません。Firebaseを必ず呼び出してください... " –

+0

解決策のクリーンアップの問題を解決しました。信じられないほど。 –

答えて

0

、(タイトルのセクションを参照:FirebaseインスタンスIDサービスを実装する)OnTokenRefreshはほんの数状況下で呼ばれる:

アプリがインストールまたはアンインストールされている
  • ユーザーがアプリデータを削除したとき。
  • アプリがインスタンスIDを消去すると、
  • トークンのセキュリティが侵害されたとき。

OnTokenRefreshをトリガーするには、まずデバイスからアプリをアンインストールする必要があります。その後、初めてアプリケーションを再インストールして開くと、OnTokenRefreshが呼び出されます。

0

あなたはこのようなあなたの活動にサービスを開始する必要があります。また

var intent = new Intent(this, typeof(FirebaseRegistrationService)); StartService(intent);

一度ソリューションをきれいにして、再度アプリを実行します。 xamarinのためのfirebaseにバグがあります。

関連する問題