gpt4 book ai didi

ios - 使用 FCM 的 Flutter 推送通知不适用于 iOS

转载 作者:行者123 更新时间:2023-12-05 03:41:05 26 4
gpt4 key购买 nike

数周以来,我一直在尝试让推送通知在 iOS 上正常工作,但无济于事。我已经梳理了文档以验证我的配置。然而,推送通知在 Android 上正常工作。

我还测试了直接从 firebase 消息控制台向 IOS 发送消息,但仍然不成功。我也尝试过之前堆栈溢出帖子中的许多建议,但都没有成功。

Flutter IOS FCM push notification not coming into notification bar

Flutter Push notification not displaying on IOS

https://github.com/FirebaseExtended/flutterfire/issues/1677

iOS FirebaseCloudMessaging Notifications not working in Debug / Test Flight nor Release

我在 iOS 14.6 上使用实体 iPhone 12。我使用的 Xcode 版本是 12.5。Xcode配置如下。

签名和能力 Signing and Capabilities

签约 Signing

应用委托(delegate)文件的代码

import UIKit
import Flutter
import Firebase
import FirebaseMessaging
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

Messaging.messaging().apnsToken = deviceToken
super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}
}

请求推送通知的代码

Future<void> notficationsPermission () async {
FirebaseMessaging messaging = FirebaseMessaging.instance;

NotificationSettings settings = await messaging.requestPermission(
alert: true,
announcement: true,
badge: true,
carPlay: false,
criticalAlert: true,
provisional: false,
sound: true,
);


print('User granted permission: ${settings.authorizationStatus}');


String uid = Pref.getString(Keys.USER_ID);
var databaseReference = FirebaseDatabase.instance.reference();
if(settings.authorizationStatus == AuthorizationStatus.authorized){
notficationStatus = true;
await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(

alert: true, // Required to display a heads up notification
badge: true,
sound: true,
);
}

else{
notficationStatus = false;
}
}
}

如何配置通知的片段

return admin.messaging().sendToTopic(
topicName, {
android: {
priority: "high",
},
// Add APNS (Apple) config
apns: {
payload: {
aps: {
contentAvailable: true,
},
},
headers: {
"apns-push-type": "background",
"apns-priority": "5", // Must be `5` when `contentAvailable` is set to true.
"apns-topic": "io.flutter.plugins.firebase.messaging", // bundle identifier
},
},
notification: {
title: snapshot2.val().group_name +
": new chat message",
body: name +":"+snapshot.val().message,
clickAction: "FLUTTER_NOTIFICATION_CLICK",
},
});

我的 Info.plist 中也有以下内容。

<key>FirebaseAppDelegateProxyEnabled</key>
<string>0</string>

最佳答案

我终于想通了,但忘了发布答案!在我的 index.js 中

exports.chatNotfi = functions.database.ref("messages/{gId}/{chat}")
.onCreate((snapshot, context)=>{
const groupId = context.params.gId;
console.log("Group id:" + groupId);
const topicName = groupId + "chat";
console.log("topic name"+topicName);
const userId = snapshot.val().userId;
return admin.database().ref("groups/"+groupId+ "/").once("value").
then((snapshot2)=>{

return admin.messaging().sendToTopic(
topicName, {
notification: {
title:
": New chat message",
body: name +":"+snapshot.val().message,
clickAction: "FLUTTER_NOTIFICATION_CLICK",
},
});
});

在我的 AppDelegate.swift 中

import UIKit
import Flutter
import Firebase
import FirebaseMessaging

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions:
launchOptions)
}
override func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

Messaging.messaging().apnsToken = deviceToken
super.application(application,
didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}
}

在我的 Info.plist 中

    <key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>

还要确保在 firebase 控制台中注册的应用与 Xcode 中使用的包标识符匹配。

关于ios - 使用 FCM 的 Flutter 推送通知不适用于 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67891865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com