Flutter 中的 Firebase (FCM) 注册令牌

52

我正在尝试使用Firebase Admin sdkJava Rest Api向我的Flutter应用程序发送通知,似乎需要设备令牌来发送通知,但我找不到如何获取该令牌的方法。 我是Flutter和Android的新手,可能漏掉了关键步骤。如果您可以帮忙,请告诉我。谢谢。


@KENdi,我想知道你是否能够得到这个结果,如果可以的话,我希望你能帮助我。 - Anana Aristotle
请使用 REST API。https://arkapp.medium.com/flutter-fcm-rest-api-7719925f2e3e - abdul rehman
@abdulrehman,我已经按照您提供的链接https://arkapp.medium.com/flutter-fcm-rest-api-7719925f2e3e进行了操作,但通知没有任何声音。请问“default”声音是什么意思?我们能否将其更改为自定义声音,例如“blink.wav”、“alert.mp3”?非常感谢。 - Kamlesh
5个回答

82

使用firebase_messaging: ^10.0.0,您可以直接获取令牌,方法如下:

String? token = await FirebaseMessaging.instance.getToken();

或者
FirebaseMessaging.instance.getToken().then((value) {
  String? token = value;
});

56
将以下内容添加到您包的pubspec.yaml文件中:
dependencies:
  firebase_messaging: ^6.0.16

您可以通过命令行安装软件包:

使用Flutter:

$ flutter packages get

现在,在您的Dart代码中,您可以使用:

import 'package:firebase_messaging/firebase_messaging.dart';

实现:

FirebaseMessaging _firebaseMessaging = FirebaseMessaging();



@override
void initState() {
  super.initState();
  firebaseCloudMessaging_Listeners();
}

void firebaseCloudMessaging_Listeners() {
  if (Platform.isIOS) iOS_Permission();

  _firebaseMessaging.getToken().then((token){
    print(token);
  });

  _firebaseMessaging.configure(
    onMessage: (Map<String, dynamic> message) async {
      print('on message $message');
    },
    onResume: (Map<String, dynamic> message) async {
      print('on resume $message');
    },
    onLaunch: (Map<String, dynamic> message) async {
      print('on launch $message');
    },
  );
}

void iOS_Permission() {
  _firebaseMessaging.requestNotificationPermissions(
      IosNotificationSettings(sound: true, badge: true, alert: true)
  );
  _firebaseMessaging.onIosSettingsRegistered
      .listen((IosNotificationSettings settings)
  {
    print("Settings registered: $settings");
  });
}

了解更多详细信息,请参考此链接

希望这可以帮助您


除了应用程序打开时,它可以正常工作。您有什么建议在Flutter中解决这个问题吗? - Shashank Pujari
3
为了即使应用程序处于打开或运行状态时也能显示通知,您可以使用flutter_local_notifications依赖项。请查看此git存储库以获取更多信息https://github.com/nitishk72/firebase_messaging_flutter/blob/master/lib/main.dart。 - nike
我按照Flutter FirebaseMessaging文档的方式尝试了,甚至克隆了Flutter Github上的示例项目。但是我仍然无法通过getToken获取到值。这是我在日志中看到的:W/FirebaseInstanceId( 4066):Token retrieval failed:SERVICE_NOT_AVAILABLE. Will retry token retrieval W/FA ( 4066): Failed to retrieve Firebase Instance Id E/FirebaseInstanceId( 4066): Failed to get FIS auth token I/FA ( 4066): Tag Manager is not found and thus will not be used W/FirebaseMessagingPlugin( 4066): getToken, error fetching instanceID: W/FirebaseMessagingPlugin( 4066): java.io.IOException: AUTHENTICATION_FAILED - Prabesh
当应用程序打开时,请使用Snackbar进行通知。 - GunJack
我建议使用overlay_support,它看起来很漂亮,而且易于实现。 https://pub.dev/packages/overlay_support - Mohammed Fadhl
@rahul,你能否根据最新版本的 Firebase FCM 包更新你的答案?这将有助于我和其他用户。非常感谢。 - Kamlesh

7

你可以使用Firebase Messaging插件发送通知。通过这段代码,你可以在控制台中打印Token。

final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
_firebaseMessaging.configure(
    onLaunch: (Map<String, dynamic> message) {
      print('onLaunch called');
    },
    onResume: (Map<String, dynamic> message) {
      print('onResume called');
    },
    onMessage: (Map<String, dynamic> message) {
      print('onMessage called');
    },
  );
  _firebaseMessaging.subscribeToTopic('all');
  _firebaseMessaging.requestNotificationPermissions(IosNotificationSettings(
    sound: true,
    badge: true,
    alert: true,
  ));
  _firebaseMessaging.onIosSettingsRegistered
      .listen((IosNotificationSettings settings) {
    print('Hello');
  });
  _firebaseMessaging.getToken().then((token) {
    print(token); // Print the Token in Console
  });
}

4
我们需要在pubspec.yaml文件中添加这个包。
firebase_messaging: ^4.0.0+1

获取执行包

现在将其导入您的代码中

import 'package:firebase_messaging/firebase_messaging.dart';

创建FirebaseMessaging实例
  FirebaseMessaging _firebaseMessaging = FirebaseMessaging();

现在我们只需添加以下链接中我已经创建的函数即可:https://dev59.com/3lMI5IYBdhLWcg3wsNq9#60523014。请注意,不要修改HTML标签。

-11

虽然我不清楚你的问题。但是,对于 FCM,你必须扩展 FirebaseMessagingService。

例如:

class PNPFirebaseMessagingService : FirebaseMessagingService() {
  override fun onNewToken(token: String?) {
     // you can collect token from here
  }
}

这是 Kotlin 吗? - emanuel sanga
这是 Kotlin 代码,与 Flutter 无关,应该用 Dart 编写。 - EL TEGANI MOHAMED HAMAD GABIR

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