- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我一直在此处和其他地方阅读有关此主题的其他帖子,但我仍在挣扎。我的应用正在使用 “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/
我正在尝试使用新的 UserNotifications 框架进行本地通知。单击/打开通知时,我将用户重定向到不同的 View Controller 。 UNUserNotificationCenter
我的 AppDelegate 中有这个: @available(iOS 10.0, *) func didReceive(_ request: UNNotificationRequest,
这是我的代码的一部分。我想使用 UNUserNotificationCenter 和 UNUserNotificationCenterDelegate 来处理通知事件。 当应用程序处于前台状态时,此代
为了获得丰富的推送通知,我一步步前进。他们在这里: 使用 plist 创建通知服务扩展: NotificationService didRecieve : override func didRecei
以下是我的代码。我正在尝试使用 didReceive 质询方法进行身份验证。 Apple 文档说,如果 session 任务需要身份验证,并且没有可用的有效凭据,则会调用“didReceive cha
当我发送推送通知时,应用程序在前台 willPresent 被调用。 didReceive 永远不会被调用。当应用程序在后台并收到推送通知时,会显示警报,但应用程序不会调用 didReceive 或
我正在尝试从 userNotificationCenter(_:didReceive:withCompletionHandler:) 中检索原始通知内容在 watchOS 中。从 APNS 发送推送通
我已经为 ios10 实现了推送通知。点击通知警报将触发“didReceive”委托(delegate),如果我将通知保存在核心数据中,或者如果我在前台则为静默通知。问题是如果我在后台收到一堆通知并且
我正在使用 func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence) 来管理在线离线状态。这个功能对于一对一用户
我正在处理本地通知,但我遇到的问题是当应用程序终止时没有调用 didReceive Response 方法,所以当我点击通知操作时它只是启动应用程序而没有做任何其他事情。但是,当该应用程序仅在后台运行
我想禁用在特殊情况下向用户发送推送通知。我在 userDefault 中保存了我的第一个推送,在第二个中我检查它是否相同。当我调试它时输入返回而不是继续,但我仍然收到推送通知。从 firebase a
我有一个 LocalNotification 类,其中实现了 UserNotifications。我在我需要展示的初始 ViewController 和 CheckViewController 之间创
将文件从 iPhone 传输到 Apple Watch 后出现错误 Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"
static let didReceiveResponseSelector : Selector = #selector((NSURLConnectionDataDelegate.connection
我的 TableView 单元格中有一个 Admob 横幅。一切似乎都正常,但是当我尝试让 func adViewDidReceiveAd(_bannerView: GADBannerView!) 正
因此,我一直在此处和其他地方阅读有关此主题的其他帖子,但我仍在挣扎。我的应用正在使用 “Fireabase FCM” 执行设备到设备的通知。我能够发送和接收消息。然而,方法“didReceive Re
我已经知道这段代码可以在 iOS 10 之前使用: func application(_ application: UIApplication, didReceive notification: UI
我有一个正常工作的应用程序,它的通知显示效果很好。现在我想处理一些通知事件,比如当用户点击横幅时。 我的 iOS 部署目标是 11.0,与我的部署目标相同。 我在 AppDelegate.swift
我想添加一个进度条以准确了解我的视频上传的百分比,但无法调用 didCompleteWithError、didReceive 响应、didSendBodyData bytesSent:Int64、to
我创建了一个背景URLSession使用以下代码的对象: let identifier = /* some background identifier */ let config = URLSessi
我是一名优秀的程序员,十分优秀!