gpt4 book ai didi

ios - 函数 didReceive RemoteMessage 未被调用 Swift 5

转载 作者:行者123 更新时间:2023-11-29 05:45:47 24 4
gpt4 key购买 nike

因此,我一直在此处和其他地方阅读有关此主题的其他帖子,但我仍在挣扎。我的应用正在使用 “Fireabase FCM” 执行设备到设备的通知。我能够发送和接收消息。然而,方法“didReceive RemoteMessage”永远不会被调用。我想使用此函数来更新应用程序和选项卡栏项目角标(Badge)编号。

我尝试添加其他方法来指示已收到消息,但这些方法也不起作用。我想我错过了一些基本的东西。我将 Swift 5 与 Xcode 10 结合使用。

import Foundation
import UIKit
import Firebase
import FirebaseFirestore
import FirebaseMessaging
import UserNotifications

class PushNotificationManager : NSObject, MessagingDelegate, UNUserNotificationCenterDelegate {

static let shared = PushNotificationManager( )

var userID: String = ""
var instanceIDToken : String = ""
let defaults = UserDefaults.standard

override init( ) {
super.init()
}

func setUserId(identifier: String) {
userID = identifier
}

func registerForPushNotifications() {
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 })
// For iOS 10 data message (sent via FCM)
Messaging.messaging().delegate = self
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
}

UIApplication.shared.registerForRemoteNotifications()
UNMutableNotificationContent().sound = UNNotificationSound.default


Messaging.messaging().shouldEstablishDirectChannel = true

updateFirestorePushTokenIfNeeded()
}


func getNotificationSettings( ) {
UNUserNotificationCenter.current().getNotificationSettings { (settings) in
print("Notification settings: \(settings)")
guard settings.authorizationStatus == .authorized else {return}
DispatchQueue.main.async{UIApplication.shared.registerForRemoteNotifications()}
}
}

func updateFirestorePushTokenIfNeeded( ) {
// let mytoken = Messaging.messaging().fcmToken
if let token = Messaging.messaging().fcmToken {
let usersRef = Firestore.firestore().collection("users_table").document(userID)
usersRef.setData(["fcmToken": token], merge: true)
}
}

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
print(remoteMessage.appData)
}

func application(received remoteMessage: MessagingRemoteMessage) {
print("applicationReceivedRemoteMessage")
print(remoteMessage.appData)
}

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print("REMOTE NOTIFICATION RECEIVED")
}

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
updateFirestorePushTokenIfNeeded()
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print(response)
}


func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound])
}

func getTokenDirectly( ) {
InstanceID.instanceID().instanceID { (result, error) in
if let error = error {
print("Error fetching remote instance ID: \(error)")
} else if let result = result {
print("Remoted instance ID token: \(result.token)")
self.instanceIDToken = result.token
self.updateFirestorePushTokenIfNeeded()
}
}
}
}

我再次在用于测试的设备上收到通知,但是

func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
print(remoteMessage.appData)
}

从未被调用过。

最佳答案

看来您没有调用此方法:

registerForPushNotifications()

因为这是您将委托(delegate)设置为self委托(delegate)方法的地方不会被召唤

关于ios - 函数 didReceive RemoteMessage 未被调用 Swift 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56158006/

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