firebase - Flutter后台推送通知不适用于iOS
问题描述
我查看了所有其他问题和答案,但即使我尝试了一切,我也无法解决我的问题。
当应用程序在 IOS 和 Android 的前台运行时,我可以收到通知。但是如果我在IOS后台,我需要进入应用程序才能看到通知。
main.dart initState 的代码
@override
void initState() {
super.initState();
_firebaseMessaging = FirebaseMessaging();
_firebaseMessaging.requestNotificationPermissions(
IosNotificationSettings(sound: true, badge: true, alert: true));
print("requested");
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
print("token");
print(token);
});
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
//showNotification(message);
},
onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
// this will never called, but it's ok
print("onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
// this will never called, but it's ok
print("onResume: $message");
},
);
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
var androidInitialize = AndroidInitializationSettings('app_icon');
var iosInitialize = IOSInitializationSettings();
var initializationSettings =
InitializationSettings(androidInitialize, iosInitialize);
//flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: notificationSelected);
}
我的 info.plist 中有与通知相关的这些键。
<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>processing</string>
<string>remote-notification</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
我的 AppDelagete.swift 文件
import UIKit
import Flutter
import Firebase
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
if FirebaseApp.app() == nil { FirebaseApp.configure()}
// if #available(iOS 10.0, *) {
// UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
// }
// Messaging.messaging().apnsToken = deviceToken
// super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
我已尝试使用此代码发送通知
DATA='{"notification": {"body": "Body","title": "Title Title"}, "priority": "high", "data": {"click_action": "FLUTTER_NOTIFICATION_CLICK", "id": "1", "status": "done", "priority":"high"}, "to": "<TOKEN>"}'
curl https://fcm.googleapis.com/fcm/send -H "Content-Type:application/json" -X POST -d "$DATA" -H "Authorization: key=<SERVERKEY>"
太感谢了...
解决方案
推荐阅读
- python - 模拟 Tornado AsyncHTTPClient 请求/响应
- java - JDK 11 编译失败,JDK 8 编译正常
- javascript - 当比较字符串时,三等号给出错误的输出,但在整数的情况下,它给出正确的输出
- angular - Angular Mat-multiple-select,从下拉列表中获取数据
- c# - 在实体框架核心中一起实现奇异命名约定和数据注释的正确方法
- java - 线程“main”中出现错误 java.lang.NumberFormatException:对于输入字符串:“”
- ruby - 清除具有所需值的输入
- sql-server - AlwaysOn 故障转移,辅助节点作业失败
- excel - Excel - 如何根据另一列的条件值计算不同列值的总和
- stackexchange - 我可以使用 Stack Exchange 数据资源管理器从 PostHistory 表中获取已删除的帖子吗?