我正在使用 Firebase云消息传递与 Xamarin Forms / iOS (包版本2.0.8)。我正确接收消息,我可以用以下方法拦截令牌刷新:
Firebase.InstanceID.InstanceId.Notifications.ObserveTokenRefresh((sender, e) => { });
在我的AppDelegate中声明。
我想在每次登录时强制fcm令牌刷新,因为我想确保每次登录时每个用户都分配了一个干净的令牌(并发送到服务器)。在Android中我使它工作,但在iOS上尝试删除InstanceId:
var handler = new InstanceIdDeleteHandler((error) => {
Console.WriteLine(error?.DebugDescription);
});
InstanceId.SharedInstance.DeleteId(handler);
var token = InstanceId.SharedInstance.Token;
我收到以下错误:
+ [FIRInstanceIDCheckinPreferences preferencesFromKeychainContents:]:无法识别的选择器发送到类0x102daab28 Xamarin.iOS:已收到 未处理的ObjectiveC异常:NSInvalidArgumentException + [FIRInstanceIDCheckinPreferences preferencesFromKeychainContents:]:无法识别的选择器发送到类0x102daab28
答案 0 :(得分:0)
经过几个小时的亵渎后,我找到了解决方案,也许这对其他人有用。
有必要在 AppDelegate :
中添加方法[Export("messaging:didRefreshRegistrationToken:")]
public void DidRefreshRegistrationToken(Messaging mess, string token)
{
}
它永远不会被击中所以它可以是空的,但是如果没有声明这个,显然不可能强制fcm标记刷新删除InstanceId。