使用Xamarin FCM教程代码遇过时警告,是否需修改适配安卓设备?
兄弟,你碰到的这些警告都是因为Firebase的旧API已经被官方弃用啦!虽然当前代码在你的目标API 28设备上可能还能凑合用,但长远来看肯定得换成新实现,不然以后升级Firebase SDK或者安卓版本大概率会出问题。我给你一步步说怎么改:
为啥会出这些警告?
FirebaseInstanceIdService、FirebaseInstanceId.Token这些老API已经被Google标记为过时,官方现在推荐用FirebaseMessagingService相关的新接口来处理设备令牌的刷新和消息接收。
具体修改方案
1. 替换你的令牌服务类
把原来的MyFirebaseIIDService.cs直接改成下面的代码就行,完全替代旧的逻辑:
using System; using Android.App; using Firebase.Messaging; using Android.Util; namespace Androidproject { [Service] [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] public class MyFirebaseMessagingService : FirebaseMessagingService { const string TAG = "MyFirebaseMessagingService"; // 替代原来的OnTokenRefresh,令牌刷新时自动触发 public override void OnNewToken(string token) { Log.Debug(TAG, "Refreshed token: " + token); SendRegistrationToServer(token); } // 额外福利:如果需要处理收到的推送消息,重写这个方法就行 public override void OnMessageReceived(RemoteMessage message) { Log.Debug(TAG, "消息来自: " + message.From); // 处理消息的自定义数据 if (message.Data != null) { Log.Debug(TAG, "消息数据: " + message.Data); } // 处理通知内容 if (message.Notification != null) { Log.Debug(TAG, "通知内容: " + message.Notification.Body); } } void SendRegistrationToServer(string token) { // 这里保留你原来的逻辑,把令牌发送到自己的服务器就行 } } }
2. 主动获取令牌的新方式
如果需要在代码里主动获取当前设备令牌(不是等刷新),原来的FirebaseInstanceId.Instance.Token要换成异步调用:
// 比如在MainActivity的OnCreate方法里调用 var currentToken = await FirebaseMessaging.Instance.GetToken(); Log.Debug(TAG, "当前设备令牌: " + currentToken);
3. 清理Manifest配置
原来的INSTANCE_ID_EVENT过滤器可以删掉了,新的服务已经通过代码里的IntentFilter指定了MESSAGING_EVENT,Xamarin会自动帮你处理Manifest的注册,不用手动改啦。
兼容性问题?放心!
你的最低API是21,目标是28,新的FirebaseMessagingService在API 21及以上完全兼容,改完之后不仅能解决警告,还能适配更后续的安卓版本,比老API靠谱多了。
内容的提问来源于stack exchange,提问作者Hobbit7
相关产品推荐
相关产品推荐

