ios - 我想将 FCMToken 发送到 IOS 中的 URL
问题描述
我将应用程序开发成 webview。并成功配置了 Firebase 推送通知。消息传递良好。
但现在我想将设备令牌放入 URL。通过它我可以根据令牌发送味精。
我在 Appdelegate.swift 中编写了这段代码
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.map {String (format: "%02.2hhx", $0)}.joined()
print("Token : \(token)")
let preferences = UserDefaults.standard
preferences.setValue(token, forKey: "token")
preferences.synchronize()
}
//Changes
func application(_ application: UIApplication,
didFailToRegisterForRemoteNotificationsWithError
error: Error) {
// Try again later.
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
completionHandler()
}
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
//Saving fcmToken to pass to the url
//Bhaskar Changes
let preferences = UserDefaults.standard
preferences.setValue(fcmToken, forKey: "token")
preferences.synchronize()
let token = Messaging.messaging().fcmToken
let dataDict:[String: String] = ["token": fcmToken]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new token is generated.
}
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
print("Message Data", remoteMessage.appData)
}
以及 Viewcontroller.swift 中的这段代码
override func viewDidLoad() {
super.viewDidLoad()
//Retrieving the fcmToken
let prefs = UserDefaults.standard
let token = prefs.string(forKey: "token")
//?token= \(token as Optional)&device=ios
print("Token accessed : \(String(describing: token))")
webView.load(URLRequest(url: URL(string: "https://instaglamexpress.com/app/customer/?device=ios&token=\(String(describing: token))")!))
}
但是每次我运行程序时。令牌未存储到令牌变量中。它显示“无”。
我是否遵循正确的程序。??
请帮助我解决实际问题。
解决方案
也许你忘记添加Messaging.messaging().delegate = self
这种方式func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
永远不会被调用。
推荐阅读
- kubernetes - 从 pod 中访问副本集信息
- android - Live Data Observer 仅调用一次。再次调用 api 更新 UI 时,它不会从服务器更新数据
- c++ - “文字类型”与“文字”是否相同?
- javascript - 如何在画布中制作输入类型文件以上传图像
- python - 无论我做什么,Matplotlib 交互模式都不起作用
- c++ - C++ 石头剪刀布
- macos - 如何创建在 macOS 10.15.6 中切换默认浏览器的程序?
- c# - 未打印空数据表的标签消息
- python - 使用 carma(犰狳矩阵和 numpy 数组)用 pybind11 包装 c++ 类时出错
- python - 有没有办法计算依赖于前一行项目的数据框?