【问题标题】:FirebaseInstanceId.Instance.Token is depricated and returns null in Xamarin.Android using Xamarin.Firebase.MessagingFirebaseInstanceId.Instance.Token 被贬低并在 Xamarin.Android 中使用 Xamarin.Firebase.Messaging 返回 null
【发布时间】:2020-05-12 19:52:25
【问题描述】:

我正在使用 Xamarin.Firebase.Messaging v71.1740 nuget 插件开发 Xamarin.Android 项目,

我正在尝试获取已经在FirebaseMessagingService扩展类方法中生成的FCM Token,

public override void OnNewToken(string p0)
{
    base.OnNewToken(p0);

    // use token
}

使用,

var token = FirebaseInstanceId.Instance.Token;

但这会返回 null 并且它也被列为过时。

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.android firebase-cloud-messaging


    【解决方案1】:

    更新

    GetInstanceId<InstanceIdResult>() 也是 deprecated 支持 FCM 令牌FirebaseMessaging.getToken()Instance IdentifierFirebaseInstallations.getId()

    所以,FirebaseMessaging.getToken() 是现在获取 FCM 令牌 的推荐方式,

    这样你就可以轻松消费了,

    var token = await FirebaseMessaging.Instance.GetToken();
    

    FirebaseInstallations.getId()是现在获取Instance Identifier的推荐方式,

    这样你就可以轻松消费了,

    var id = await FirebaseInstallations.Instance.GetId();
    

    这里,var 属于 Type Java.Lang.Object。执行token.ToString() 以获得string 值。

    原创

    FirebaseInstanceId.Instance.Tokendeprecated 支持GetInstanceId<InstanceIdResult>()

    所以,GetInstanceId<InstanceIdResult>() 是推荐的方式,

    这就是你可以使用它的方式,

    var instanceIdResult = await FirebaseInstanceId.Instance.GetInstanceId().AsAsync<IInstanceIdResult>();
    var token = instanceIdResult.Token;
    

    【讨论】:

    • 我正在尝试您的解决方案,但 FirebaseInstanceId.Instance 在我的 Xamarin Android 应用程序中为空...请问您有什么建议吗?
    • 假设您已正确完成基本配置,您是否在添加 google-services.json 文件并将其设置为 GoogleServicesJson 后运行了 clean & rebuild?
    • 通过基本设置我的意思是,* 在 Xamarin.Android 项目中安装 Xamarin.Firebase.Messaging 插件 * 在 android 项目根目录中包含 google-services.json 文件并设置其构建操作 GoogleServicesJson * 在 AndroidManifest.xml 中添加 &lt;uses-permission android:name="android.permission.INTERNET" /&gt; * 确保您正在测试的 Android 手机中提供 Google Play 服务 * 如果高于 android 8,则创建通知通道 * 使用 com.google.firebase.MESSAGING_EVENT IntentFilter 创建 FirebaseMessagingService 服务
    • 最后,我发现了问题...使用最新版本的 Xamarin.Firebase.Core (71.1601.0) 使我的 FirebaseInstanceId.Instance 为空
    • 不幸的是,这个解决方案现在似乎也被弃用了。
    【解决方案2】:

    如果您在FirebaseInstanceId.Instance 上得到空值,则在调用时

    var instanceIdResult = await FirebaseInstanceId.Instance.GetInstanceId().AsAsync<IInstanceIdResult>();
    

    我要更新

    Xamarin.Firebase.Messaging to version 71.1740.1
    

    并将其添加到 yourproject.android.csproj

    <PropertyGroup> 
        <AndroidManifestMerger>manifestmerger.jar</AndroidManifestMerger> 
    </PropertyGroup>
    

    (more info)

    这对我有用(不确定两者是否都是强制性的)

    【讨论】:

      【解决方案3】:

      哦,看,FirebaseInstanceId.Instancedeprecated too

      看起来更新的方法是:

      var token = await FirebaseMessaging.Instance.GetToken();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-20
        • 2021-11-10
        • 2018-09-16
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多