【发布时间】:2021-01-22 08:06:20
【问题描述】:
我只在前台收到 Fcm 推送通知。应用在后台并终止时不会收到通知。
Swift 代码
AppDelegate.swift
导入 UIKit 导入颤振 导入谷歌地图 导入 Firebase 导入 Firebase 消息传递 导入 FirebaseInstanceID
@UIApplicationMain @objc 类 AppDelegate: FlutterAppDelegate {
/// didFinishLaunchingWithOptions
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
if #available(iOS 10.0, *) {
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)
}
let remoteNotif = (launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [NSObject : AnyObject])
if remoteNotif != nil {
self.application(application, didReceiveRemoteNotification: remoteNotif!)
UIApplication.shared.applicationIconBadgeNumber = 0
self.window?.makeKeyAndVisible()
return true
}
GMSServices.provideAPIKey("")
GeneratedPluginRegistrant.register(with: self) //ragister plugin
application.registerForRemoteNotifications() //register remoteNotifications
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
/// didRegisterForRemoteNotificationsWithDeviceToken
override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Auth.auth().setAPNSToken(deviceToken, type: .unknown)
Messaging.messaging().apnsToken = deviceToken as Data
}
/// didReceiveRemoteNotification
override func application(_ application: UIApplication,
didReceiveRemoteNotification notification: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if Auth.auth().canHandleNotification(notification) {
completionHandler(.noData)
return
}
print(notification)
}
override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Unable to register for remote notifications: \(error.localizedDescription)")
}
override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]){
print("Murtuza")
}
override func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
if Auth.auth().canHandle(url) {
return true
}
return false;
}
// MARK: - UNUserNotificationCenterDelegate Method
override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print(notification)
completionHandler([.alert])
}
override func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print(response)
completionHandler()
}
}
颤动代码
_initFirebaseMessaging() {
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
print('AppPushs onMessage : $message');
_showNotification(message);
return;
},
onBackgroundMessage: Platform.isIOS ? myBackgroundMessageHandler : myBackgroundMessageHandler,
onResume: (Map<String, dynamic> message) {
print('AppPushs onResume : $message');
if (Platform.isIOS) {
_showNotification(message);
}
return;
},
onLaunch: (Map<String, dynamic> message) {
print('AppPushs onLaunch : $message');
return;
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
_firebaseMessaging.onIosSettingsRegistered.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
}
我该如何解决这个问题?
【问题讨论】:
标签: ios firebase flutter push-notification firebase-cloud-messaging