昨晚,我在我的iOS应用程序中测试了来自Firebase的推送通知,它按预期工作
我能够从at云功能向特定FCM令牌发送通知。使用相同方法时,今天早上的通知不会到达。
云函数
以下是我用来发送通知的函数:
function sendNotification(title: string, body: string, token: string): Promise<void> {
const message: admin.messaging.Message = {
apns: {
headers: {
'apns-priority': '10'
},
payload: {
aps: {
alert: {
title: title,
body: body,
},
sound: "default"
}
}
},
token: token
}
return admin.messaging().send(message).then(response => { console.log(`Notification response ${response}`) }).then(justVoid)
}
这里的令牌是我在iOS应用程序中从InstanceId收到的令牌。当触发此功能时,我在Firebase web控制台的云功能日志中看到以下内容:
通知响应项目/项目名称/消息/0:1571998931167276 7d46fcf9fd7ecd
据我所知,这是一个成功的信息。所以我希望此时通知会显示在设备上,但什么都没有。
iOSApp
我按照本指南进行了故障排除,并确信设置正确:https://firebase.google.com/docs/cloud-messaging/ios/first-message?authuser=0
我确实尝试在Im测试的设备上重新安装应用程序:我已经验证了该应用程序在重新安装后是否完成了以下步骤:
>
调用:UIApplication.shared.registerForRemoteNotifications()
通过实现:func messaging(_messaging:,didReceiveRegistrationToken fcmToken:)收听更新的FCM令牌
调用:InstanceID. instanceID(). instanceID(handler:)
再次检查iOS设置应用程序中是否允许我的应用程序使用通知。
来自控制台的测试通知
我尝试过使用测试设备最近的FCM令牌从通知编辑器发送测试通知,但此通知也没有显示,并且它不会在屏幕上给我任何反馈通知是否成功发送。
我做错了什么?
对如何调试此问题有任何建议吗?
当我们使用推送通知时,调试
问题非常困难。
根据我的经验,您的typecript
或iOS
代码没有任何问题,因为之前它运行良好。以下是消息推送不起作用的可能原因。
通常,与APNS相关的问题是由证书引起的。
>
确保您正在将正确的APNS配置文件上载到firebase控制台以用于开发和发布模式。
确保您已在功能中启用通知。
您的项目-
确保您已将正确的GoogleService-Info.plist
添加到
项目中。
APNS证书未过期。
确保您使用的是最新版本的Firebase。
您的设备时间应该是自动的,而不是功能时间。
如果您仍然认为这是与代码相关的问题,并且上述解决方案不起作用,那么您可以使用下面的HSAPNSHelper类的包装器类,它是由我创建的,适用于iOS 10和更高版本。
import Foundation
import UserNotifications
import Firebase
class HSAPNSHelper: NSObject {
static let shared = HSAPNSHelper()
let local_fcm_token = "local_fcm_token"
var notificationID = ""
func registerForPushNotification(application:UIApplication){
FirebaseApp.configure()
self.getFCMToken()
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
DispatchQueue.main.async {
self.getFCMToken()
}
}
application.registerForRemoteNotifications()
}
}
extension HSAPNSHelper:UNUserNotificationCenterDelegate {
fileprivate func getFCMToken() {
InstanceID.instanceID().instanceID(handler: { (result, error) in
if error == nil, let fcmToken = result?.token{
print("FCM Token HS: \(fcmToken)")
UserDefaults.standard.set(fcmToken, forKey: self.local_fcm_token)
}
})
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("didFailToRegisterForRemoteNotificationsWithError : \(error)")
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var token = ""
for i in 0..<deviceToken.count {
token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
}
Messaging.messaging().apnsToken = deviceToken
getFCMToken()
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo as! [String: Any]
print(userInfo)
completionHandler([.alert, .badge, .sound])
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
print(userInfo)
self.notificationRedirection()
}
private func notificationRedirection(){
}
func fcmToken() -> String{
return UserDefaults.standard.string(forKey:local_fcm_token) ?? ""
}
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//For Push notification implementation
HSAPNSHelper.shared.registerForPushNotification(application: application)
return true
}
使用fcmToken()获取当前FCM令牌。
问题内容: 我是Firebase的新手,我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,遇到了错误,例如发送者ID不匹配和HTTP状态为401的身份验证错误。请注意,使用Firebase控制台,我可以将消息发送到客户端。 对于客户端应用程序,我执行了以下操作: 从此处克隆了Firebase 快速入门应用程序-https : //github.com/firebase/qu
我是Firebase新手,当我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,我遇到了一些错误,例如发送者id不匹配和HTTP状态401的身份验证错误。请注意,使用Firebase控制台,我能够将消息发送到客户端。 对于客户端应用程序,我执行了以下操作: 从这里克隆Firebase快速入门应用--https://github.com/firebase/quickstart-
我试图在我正在开发的Cordova应用程序中获得推送通知。它们在Android应用程序中工作得很好,在iOS应用程序中,当应用程序处于前台时,它们也工作得很好,但当应用程序处于后台或终止时,我不会收到任何通知。 我启用了“推送通知”和“后台模式-远程通知”功能: 我100%肯定服务器有设备令牌(因为推送通知在前台工作,我可以在数据库中看到它)。 如果我在应用程序应该收到通知后启动它或将它带到前台,
问题内容: 我正在尝试在收到C2DM消息时显示一个简单的通知。服务提供给UI,但仍在主线程上运行。我见过有人声称您可以通过服务创建和显示通知。 } 我不知道为什么会抛出该异常。 问题答案: 首先,引发异常是因为创建的通知没有引用该对象的视图对象(contentView属性设置为null)。您必须在显示通知之前调用setLatestEventInfo。 其次,不赞成使用您使用的构造函数。请使用Not
我需要帮助。Firebase通知在后台不工作。这是我的代码:
我正在尝试向Xamarin添加推送通知。使用本教程的iOS应用程序https://docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-ios-push-notification-apns-get-started 我已经按原样完成了所有步骤,以下是我迄今为止尝试的步骤:- AppDelegate。反恐精