我正在通过Flutter让Firebase云消息与iOS协同工作。我走了这里、这里、这里的台阶,运气不好。
我没有使用模拟器,我使用的是iOS 11.4.1的iPhone 8+。我已经在Firebase控制台中安装了所有三个APN证书。我已致电FirebaseMessaging.requestNotificationPermissions();
并接受了对话。我正在通过FCM控制台发送消息进行测试。我的手机已通过Firebase认证(匿名认证(。
在应用程序打开或关闭时,我不会收到消息。
如果有人对我可能缺少的东西有任何想法,请提供帮助。我希望能够为其他来到Flutter/iOS/FCM的人制作一个牛叉点列表,让他们在没有错误的情况下遵循。
好吧,这就是我学到的。真希望我把这一切都写下来,当我开始工作的时候。但它应该对某人有帮助。
- 确保Firebase已在Flutter项目中设置并运行
- 将firebase_messaging添加到
pubspec.yaml
flutter packages get
- 创建/下载您的APNS密钥并将其上传到Firebase控制台
- 在Apple Dev网站上创建/下载您的配置文件,然后双击进行安装
-
使用下面的重要片段
-
通过Firebase控制台向所有应用程序用户或您的
messagingToken
发送消息。
如果你有一个运行应用程序的物理设备,并且你按照这些步骤操作,你应该会收到后台通知。你不会在前台收到它们。如果有人想办法把它们放在前台,请告诉我!
片段
import 'package:firebase_messaging/firebase_messaging.dart';
FirebaseMessaging messaging = FirebaseMessaging();
messaging.configure(); // NECESSARY
messagingToken = await fb.messaging.getToken();
messaging.subscribeToTopic("general");
// this will launch a modal asking if you want to receive notifications
messaging.requestNotificationPermissions();
为了能够向iOS应用程序发送推送通知,您似乎错过了一些配置步骤。也许你能做的最好的事情就是发布更多关于你的配置环境的信息。
然而,对于您给我们的描述,这可能是关于以下选项之一的问题:
- 您需要配置正确的环境来发送推送通知。如果你直接从Xcode将应用程序安装到设备上,你需要使用
Sandbox
环境,但如果你的应用程序是从AppStore或Testflight安装的,你需要用到Production
。这是因为环境(沙盒和生产(都引用了不同的url来发送推送通知 - 不存储与您的应用程序和当前设备之间的特定关系相关的
deviceId
。请记住,当您发送推送通知时,您需要告知哪些设备将收到该通知
请让我知道这是否回答了您的问题,或者我遗漏了一些
编辑
为了处理前台通知,您需要添加didReceiveRemoteNotification
回调,以便获得title
、message
JSON结构的所有自定义参数。
在这种特殊情况下,插件文档指出,根据应用程序的状态,您需要三个不同的回调。
- 如果应用程序位于FOREGROUND,则需要使用
onMessage
回调 - 如果应用程序处于后台,则需要使用
onResume
回调 - 如果应用程序已终止,则需要使用
onLaunch
回调
然而,这只会使参数信息可用,您仍然需要以某种自定义方式向用户显示它们(例如,如果您在不同的对话中,WhatsApp或Facebook Messenger可以在视图顶部以独立气泡的形式向您显示新的聊天消息,或者如果此新消息属于当前聊天,则会将其添加到对话的底部(。