我正在尝试在我的Xamarin Android项目中实现远程通知。我按照各种指南中的逐步说明进行操作,但OnTokenRefresh
方法从未被调用,即使是第一次,所以看起来我的应用程序没有收到任何类型的令牌,甚至没有任何类型的火力登记。
google-services.json
google-services.json
并将Build Action设置为GoogleServicesJson 我在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>
我创建了一个扩展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 :(得分:3)
您应该在Activity中启动服务,如下所示:
var intent = new Intent(this, typeof(FirebaseRegistrationService));
StartService(intent);
同样清理解决方案一次并再次运行应用程序。 xamarin的firebase中存在一个错误。
答案 1 :(得分:2)
根据this document,(请参阅标题为:实施Firebase实例ID服务的部分)仅在以下几种情况下调用OnTokenRefresh:
要触发OnTokenRefresh,您应首先从设备中卸载该应用。然后,当您重新安装应用程序并首次打开它时,将调用OnTokenRefresh。
答案 2 :(得分:0)
您可以通过禁用
来避免每次清洗溶液在两次部署之间保留设备上的应用程序数据缓存
在
下工具->选项-> Xamarin-> Android设置。
这使得OnTokenRefresh
在每次重新部署后都被调用。
答案 3 :(得分:0)