【问题标题】:How to get "Apps Instance Id" in Flutter如何在 Flutter 中获取“应用程序实例 ID”
【发布时间】:2019-11-08 02:40:00
【问题描述】:

我想在我的 Flutter 应用上设置 firebase 应用内消息传递

首先,它需要FirebaseInstanceId 解释here,所以我可以测试发送消息到我的设备。

但是文档并没有详细说明如何在 Android 上获取它,尤其是在 Flutter 上。

有什么想法吗?

注意:有人声称他可以在flutter中使用inapp-messaging,请参阅here

提前谢谢你...

【问题讨论】:

  • 两个很棒的视频,RajaFireship
  • 我使用 logcat 在 Android 上找到了实例 ID。最简单的解决方案

标签: firebase flutter dart firebase-in-app-messaging


【解决方案1】:

要检索 FirebaseInstanceId,您需要实施 Firebase 应用内消息 SDK 并确保您的应用连接到 Firebase。

应用连接到 Firebase 后,它会在应用运行后将 FirebaseInstanceId 添加到 Android 日志中。

在您链接的文章中,Google 解释说您可以通过在日志中查找字符串 I/FIAM.Headless: Starting InAppMessaging runtime with Instance ID <YOUR_APP_ID> 来找到 FirebaseInstanceId

如果您使用的是 Android Studio,您应该能够使用logcat 窗口来浏览设备的日志(在调试应用程序时)。 logcat 窗口还允许您搜索和过滤日志,因此应该相对容易找到提到的字符串。

简而言之(在 Android Studio 中):

  1. 在您的应用中实施 Firebase 应用内消息 SDK;
  2. 开始调试应用程序(最好在真正的 Android 设备上);
  3. 调试时打开Logcat窗口;
  4. 在日志中搜索字符串I/FIAM.Headless: Starting InAppMessaging runtime with Instance ID
  5. FirebaseInstanceId 应直接列在字符串之后。

【讨论】:

  • 我正在使用 VSCODE,我在哪里可以找到这个?
  • 不确定它是否会显示在“调试控制台”窗口中。否则,您始终可以使用@prisar 提到的 shell 命令:adb logcat | grep 'InAppMessaging' 或使用@david-airapetyan 提到的代码示例。
【解决方案2】:

可以在 iOS 上使用 -instanceIDWithHandler 或在 Android 上使用 getInstanceId 获取 Firebase 实例 ID。

在撰写本文时,我不知道有一个独立插件可以做到这一点,这意味着您有两个选择:

  • 编写您自己的插件来包装这些方法的本机实现
  • 使用 firebase_messaging Flutter 插件,该插件恰好通过其 getToken() 方法公开了 Instance ID

如果您使用 firebase_messaging 路线(请注意,这意味着您正在添加另一个依赖项),您可以执行以下操作:

final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

然后,在您的代码中的某处:

var token = await _firebaseMessaging.getToken();
print("Instance ID: $token");

更新

当您调用 get token 时,您会得到以下格式的内容:NNNNNNN:MMMMMMMMMMMMMMMMMM。只取冒号前的第一部分 (NNNNNNNN) - 这是您测试应用内消息活动所需的实例 ID。

【讨论】:

  • 我尝试输入从_firebaseMessaging.getToken() 获得的instance_id / token,但在firebase 控制台中出现错误:Invalid format. Please check the docs for retrieving the instance ID. 任何想法?
  • 当你调用 get token 时,你会得到如下格式的东西:NNNNNNN:MMMMMMMMMMMMMMMMMM。只取冒号前的第一部分 (NNNNNNNN) - 这是您测试应用内消息活动所需的实例 ID。
  • 根据 2019 年 10 月,必须传递完整的令牌,包括冒号后的内容
  • 在哪里实际记录了令牌的第一部分实际上是稳定实例 id?
【解决方案3】:

您可以在终端中运行它。

adb logcat | grep 'InAppMessaging'

02-26 23:47:44.835 28379 28379 I FIAM.Headless: 开始 安装 ID 为 dTEmOkEwRzC_xiO8YNPXs0 的 InAppMessaging 运行时

【讨论】:

    【解决方案4】:

    使用flutterfire_installations,可以得到:

    • 安装 ID:

      String id = await FirebaseAppInstallations.instance.getId(); 
      
    • 身份验证令牌:

      String token = await FirebaseAppInstallations.instance.getToken(); 
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2020-12-09
      • 1970-01-01
      • 2021-06-10
      • 2010-10-12
      • 2019-07-08
      • 2021-07-25
      相关资源
      最近更新 更多