2017-10-16 141 views
0

我試圖在Xamarin Android項目中實現遠程通知。我遵循各種指南中的逐步指導,但從未調用過OnTokenRefresh方法,即使是第一次,所以它看起來像我的應用程序沒有收到任何類型的令牌,甚至沒有進行任何類型的Firebase註冊。OnTokenRefresh從未在Xamarin中調用過Android

  1. 我已經加入火力地堡到我的Android應用程序,並下載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永遠不會被叫?

+0

您是否獲得'不成功'或'成功'的FirebaseApp初始化? https://stackoverflow.com/a/42159446/4984832 – SushiHangover

+0

在MainActivity中執行:'FirebaseApp.InitializeApp(this);'但它返回此Java異常:「Java.Lang.IllegalStateException:在此過程中未初始化FirebaseApp 。確保調用Firebase ...「 –

+0

我已經解決了清理解決方案的問題。難以置信。 –

回答

0

根據this document,(見標題爲:實施火力地堡實例ID服務)OnTokenRefresh只在少數情況下稱爲:

  • 當應用程序被安裝或卸載。
  • 當用戶刪除應用程序數據。
  • 當應用程序擦除實例ID時。
  • 當令牌的安全性受到影響時。

爲了觸發OnTokenRefresh,您應該先從設備上卸載應用程序。然後,當您重新安裝應用程序並首次打開它時,OnTokenRefresh將被調用。

0

您應該啓動該服務在您的活動是這樣的:

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

同時清潔液一次,然後再次運行該應用程序。 Xamarin在firebase中存在一個錯誤。

相關問題