如何在Flutter中获取“应用实例ID”

10
我想在我的Flutter应用程序中设置Firebase In-App Messaging。 首先,如此处所述,需要使用FirebaseInstanceId来测试发送消息到我的设备。
然而,文档没有详细说明如何在Android上获取它,特别是在Flutter上。
有什么想法吗?
注意:有人声称他可以在Flutter中使用In-App Messaging,请参见这里
提前感谢您...

1
两个很棒的视频,RajaFireship - Tinus Jackson
我在Android上使用logcat找到了实例Id。最简单的解决方案。 - Stijn2210
4个回答

18

在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");

更新

当您调用获取令牌时,您将获得以下格式的内容:NNNNNNN:MMMMMMMMMMMMMMMMMM。只取冒号(:)之前的第一部分(NNNNNNNN)- 这是您需要测试In-App Messaging广告系列的实例ID。


2
我尝试输入从_firebaseMessaging.getToken()获取的instance_id / token,但在Firebase控制台中出现错误:无效格式。请检查检索实例ID的文档。有什么想法吗? - questionasker
1
当您调用get token时,您会得到以下格式的内容:NNNNNNNN:MMMMMMMMMMMMMMMMMM。只取冒号前面的第一部分(NNNNNNNN)- 这是您需要测试In-App Messaging广告系列的实例ID。 - David Airapetyan
1
根据2019年10月的规定,必须传递完整的令牌,包括冒号后面的内容。 - Marco Alves
1
实际上在哪里记录了令牌的第一部分是稳定的实例ID? - Scorb
你真是个救命恩人。由于某种原因,使用官方方法在控制台中没有显示实例 ID。这种方法有效。不过我想知道为什么它没有被记录在文档中。 - elfico

5
你可以在终端中运行此命令。
adb logcat | grep 'InAppMessaging'

02-26 23:47:44.835 28379 28379 I FIAM.Headless: 启动 InAppMessaging 运行时,安装 ID 为 dTEmOkEwRzC_xiO8YNPXs0


1
要检索FirebaseInstanceId,您需要实施Firebase In-App消息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 In-App消息SDK;
  2. 开始调试应用程序(最好在真实的Android设备上);
  3. 在调试时打开Logcat窗口;
  4. 搜索字符串I/FIAM.Headless: Starting InAppMessaging runtime with Instance ID的日志;
  5. FirebaseInstanceId应该直接列在字符串后面。

我正在使用VSCODE,我应该在哪里找到这个? - Apoorv pandey
不确定它是否会显示在“DEBUG CONSOLE”窗口中。否则,您可以始终回退到shell命令,如@prisar所述:adb logcat | grep 'InAppMessaging'或使用@david-airapetyan提到的代码示例。 - Maurits van Beusekom

0

使用 flutterfire_installations,您可以获得:

  • 安装 ID:

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

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

老办法已经不再有效了 - Hama Sabah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接