Xamarin.Forms中Plugin.FirebasePushNotification刷新Token未触发问题
Xamarin.Forms iOS端Firebase推送Token刷新事件未触发修复方案
针对你遇到的iOS端OnTokenRefresh事件未触发、安卓端正常的问题,可按以下步骤排查修复:
1. 调整Firebase初始化顺序
当前你在FinishedLaunching中先加载Xamarin.Forms应用再初始化Firebase推送,可能导致App构造函数中订阅的事件错过回调时机。修改初始化顺序:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init(); // 先初始化Firebase推送 FirebasePushNotificationManager.Initialize(options, true); // 再加载应用实例 LoadApplication(new App()); return base.FinishedLaunching(app, options); }
2. 主动请求推送权限
iOS 10+需要显式向用户请求推送权限,否则系统不会触发远程通知注册。在FinishedLaunching中添加权限请求代码:
// 放在Firebase初始化之后 UNUserNotificationCenter.Current.RequestAuthorization(UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (granted, error) => { if (granted) { InvokeOnMainThread(() => UIApplication.SharedApplication.RegisterForRemoteNotifications()); } });
3. 验证GoogleService-info.plist配置
- 确保plist文件中的
CLIENT_ID、GCM_SENDER_ID等参数与Firebase控制台一致 - 右键文件→属性,确认生成操作设置为
BundleResource,保证文件被打包进App
4. 检查FirebaseAppDelegateProxyEnabled设置
确认Info.plist中FirebaseAppDelegateProxyEnabled为布尔类型的YES,而非字符串类型。错误的类型会导致Firebase代理无法正常工作。
5. 排查注册日志
在AppDelegate的相关方法中添加日志,定位问题节点:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { System.Diagnostics.Debug.WriteLine($"APNS Token已获取: {deviceToken.ToString()}"); FirebasePushNotificationManager.DidRegisterRemoteNotifications(deviceToken); } public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error) { FirebasePushNotificationManager.RemoteNotificationRegistrationFailed(error); System.Diagnostics.Debug.WriteLine($"推送注册失败: {error.LocalizedDescription}"); }
- 如果输出
APNS Token已获取但未触发OnTokenRefresh,检查Firebase控制台是否上传了正确的APNs证书 - 如果输出注册失败日志,根据错误信息排查权限或证书问题
6. 确认NuGet包兼容性
检查Plugin.PushNotification版本与当前Xamarin.Forms、Xamarin.iOS版本是否兼容,建议更新至最新稳定版避免版本冲突。
内容的提问来源于stack exchange,提问作者Amature123
相关产品推荐
相关产品推荐

