- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 Firebase FCM 集成的新手,我遇到了一些问题。第一次安装该应用程序时,我没有收到推送通知,但如果我打开和关闭应用程序几次,然后从 Firebase 发送推送通知,我将收到通知,而客户端或服务器代码没有任何更改。谁能帮我解决这个问题?
我在下面附上了我的 appdelegate 代码
import UIKit
import Firebase
import UserNotifications
import FirebaseMessaging
import FirebaseInstanceID
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate,MessagingDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
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: { (granted, error) in
if error == nil{
UIApplication.shared.registerForRemoteNotifications()
}
})
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
}
application.registerForRemoteNotifications()
return true
}
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
}
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
UIApplication.shared.registerForRemoteNotifications()
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// I have tried both method but none worked and i also tried MessagingAPNSTokenType.sandbox and prod
// Method 1: Messaging.messaging().apnsToken = deviceToken
// Method 2:
Messaging.messaging().setAPNSToken(deviceToken, type: MessagingAPNSTokenType.unknown)
}
}
提前致谢
最佳答案
我遇到了与您相同的问题,并且有一个已知问题 FCM token
并不总是与 APNs device token
相关联如果UIApplication.shared.registerForRemoteNotifications()
调用不够早。
根据 this GitHub 线程此问题已在 FirebaseInstanceID SDK
中修复,应该很快就会出来。
与此同时,您可以:
锁定您的 FirebaseInstanceID pod to 2.0.0
在你的 Podfile 中,或者
确保您正在调用 UIApplication.shared.registerForRemoteNotifications()
在应用程序启动时,最好在 FirebaseApp.configure()
之前.
更新:
我刚刚做了一些额外的测试,我注意到这在什么时候起作用有点随机。对于某些设备,它可以立即用于某些设备,而对于某些则不能。对于某些设备 Single Token push
工作而不是User Segment
.我设法让它工作,这样你至少要么得到 Single Token push
或 User Segment
通过添加以下内容:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 10.0, *) {
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in
})
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
// For iOS 10 data message (sent via FCM)
Messaging.messaging().delegate = self
application.registerForRemoteNotifications()
print("::: registerForRemoteNotifications iOS 10")
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
print("::: registerUserNotificationSettings iOS 9")
}
FirebaseApp.configure()
Messaging.messaging().delegate = self
Messaging.messaging().shouldEstablishDirectChannel = true
if let refreshedToken = InstanceID.instanceID().token() {
print("::: InstanceID token: \(refreshedToken)")
}
NotificationCenter.default.addObserver(self, selector: #selector(tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().setAPNSToken(deviceToken, type: .prod)
if let refreshedToken = InstanceID.instanceID().token() {
print("InstanceID token: \(refreshedToken)")
}
}
问题是,如果您不访问 didRegisterForRemoteNotificationsWithDeviceToken
,它将无法工作。功能。
关于ios - Firebase FCM 最初不工作,但如果打开应用程序,则在 3-4 次后工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578563/
我正在尝试使用 Firebase 云消息传递。我将通知从 Node.js 服务器发送到我注册到通知系统的应用程序。 我的问题是,在 Android 5.1 上,即使我在 nofitification
根据FCM documentation如果 FCM 服务器检测到高优先级消息不会导致用户交互的模式,则高优先级消息可能会被取消优先级。该机制的细节未指定。问题: 这究竟是如何工作的? 检测算法如何收集
更新到最新的 Firebase 后,无法获取所选 的 FCM 注册 token fcmSenderId : FirebaseInstanceId .getInstance()
我想在单个 fcm 请求中向多个设备发送通知。我的通知文本对于所有设备都是相同的。我必须同时向所有用户发送超过 10000 条通知,并且文本是相同的,所以我想以最小的 fcm 请求发送所有通知。我正在
// body 就像这样 { "to": "/topics/NEWS" , "data":{ "extra_information": "This is
当我在浏览器中生成 FCM token 时,我还将其发送到我的服务器,服务器使用 firebase 管理模块将其订阅到主题,如下所示: messaging.subscribeToTopic(token
我正在开发一个应用程序,我想通过 php 实现 FCM 推送通知。 所以我制作了两个java文件:1.FirebaseInstanceID(工作正常并在数据库中正确获取 token )2.Fireba
我正在尝试使用 cordova-plugin-firebasex 向我的cordova 应用程序上的特定用户发送通知这是 cordova-plugin-firebase 的一个 fork 修复和改进。
我正在尝试使用以下方法从我的 iOS-Objective-C 应用发送消息: NSInteger iTime = [NSDate timeIntervalSinceReferenceDate]
我正在尝试为 FCM 实现服务器以向 android/iOS 设备发送通知。 我需要向 android 和 iOS 发送纯数据通知,但 iOS 的后台通知似乎非常不稳定。 (即使该应用程序在前台,我也
我对向手机发送通知的选项感到困惑。我在 Azure 上部署了在 .Net core 中创建的后端。现在,当管理员推出新优惠时,必须将推送通知发送到移动设备。我找到了 3 个很好的替代品。所有人都以自己
我用 POST 设置了一个 REST 客户端 --> https://fcm.googleapis.com/fcm/send 内容类型:应用程序/json 授权: key = JSON 正文: {
我在 Flutter 应用程序中使用 firebase_messaging v9.0.1。关于基于 https://pub.dev/packages/firebase_messaging/exampl
当我使用 Firebase 控制台时,通过激活“高级选项”下的“声音”一切都是完美的,正如 Mouad Abdelghafour AitAli 在接受的答案中所解释的那样 Firebase Push
我已经尝试在 Curl 中使用以下命令使用 Firebase REST Api 发送通知并且它有效: curl -X POST --header "Authorization: key=AIza...
即使 ios 也可以从 fcm 控制台获得通知。 Controller 功能 : public function push(Request $request) { $validator = V
对于通过 XMMP 支持上行和下行消息的服务器端实现,我使用 org.jivesoftware.smack.tcp.XMPPTCPConnection。我从 GCM 迁移到 FCM,现在我的应用服务器
这是我的代码: function sendToken(token) { $.ajax({ url: 'https://iid.googleapis.com/iid/v1/' + token
这是我第一次使用 Flutter 测试 FCM。我检查了一些来自 GitHub 的 SO 问题和文档。 我能够发送通知,当应用程序未运行时它们会被发送。 如果应用程序正在运行或在后台,则消息不可见。
我正在尝试在未接收但他们在调试 apk 中发送/接收很好的发布应用程序中发送 FCM 通知(在用户之间发送消息、好友请求等),我有对此进行了搜索,发现一些对我不起作用的解决方案 像这样,我把它放在 p
我是一名优秀的程序员,十分优秀!