2017-10-16 105 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中存在一个错误。

相关问题