You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms Android端应用更新后FCM token无法生成问题咨询

Xamarin.Forms Android端FCM更新后无法获取令牌解决方案

问题根源

Android端OnTokenRefresh回调仅在令牌发生变更时触发,旧版本应用未集成FCM,更新到集成FCM的新版本不属于该回调的默认触发场景,因此不会自动生成并返回令牌。iOS端的DidReceiveRegistrationToken回调本身包含首次注册触发逻辑,因此不存在该问题。

解决方案

1. 应用启动时主动拉取FCM令牌(最稳妥方案)

该方案可覆盖首次安装、应用更新等所有场景,不需要依赖系统回调触发。在Android项目的主ActivityOnCreate方法或自定义Application类的OnCreate方法中添加如下逻辑:

using Firebase.Messaging;
using Android.Gms.Tasks;

// 应用启动时主动调用拉取令牌
FirebaseMessaging.Instance.GetToken().AddOnCompleteListener(new OnTokenFetchListener());

// 实现拉取完成回调
public class OnTokenFetchListener : Java.Lang.Object, IOnCompleteListener
{
    public void OnComplete(Task task)
    {
        if (task.IsSuccessful && task.Result != null)
        {
            string fcmToken = task.Result.ToString();
            // 复用原有`FirebaseRegistrationService`中的令牌存储、上传到业务服务器的逻辑即可
            ProcessFcmToken(fcmToken);
        }
    }
}

该逻辑仅需在Android端实现,iOS端原有触发逻辑无需改动

2. 按版本号触发减少重复调用

如果不需要每次应用启动都执行拉取操作,可以添加版本校验逻辑,仅在应用更新后首次启动时执行一次拉取:

  • 用本地存储(如SharedPreferences)记录上一次运行的应用版本号
  • 应用启动时对比当前应用版本号与存储的版本号
  • 若版本号不一致,执行一次令牌主动拉取,拉取成功后更新存储的版本号

注意事项

  • 不要将OnTokenRefresh作为唯一的令牌获取入口,它的设计定位是令牌更新时的通知回调,而非首次获取令牌的触发入口
  • 主动拉取逻辑可以和原有OnTokenRefresh逻辑共存,后续令牌过期更新时OnTokenRefresh仍然会正常触发,不会出现逻辑冲突
  • 该方案已覆盖无FCM集成的旧版本更新到有FCM集成的新版本的场景,用户无需卸载重装即可正常获取推送令牌

内容的提问来源于stack exchange,提问作者Sreejith Sree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:15:03