Ios 正在Swift 4中获取远程通知设备令牌?
我正在使用此代码获取通知中心设备令牌 它在Swift 3中工作,但在Swift 4中不工作。什么改变了Ios 正在Swift 4中获取远程通知设备令牌?,ios,swift,apple-push-notifications,devicetoken,Ios,Swift,Apple Push Notifications,Devicetoken,我正在使用此代码获取通知中心设备令牌 它在Swift 3中工作,但在Swift 4中不工作。什么改变了 if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in } } func application(_
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
}
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print(deviceTokenString)
}
假设您已经检查了所有设置是否正确,根据您的代码,它似乎可以正常工作,您所要做的就是将格式更改为
%02.2hhx
,而不是%02X
,以获得适当的十六进制字符串。因此,你应该得到一个有效的
作为一种良好的做法,您可以在项目中添加数据
扩展以获取字符串:
import Foundation
extension Data {
var hexString: String {
let hexString = map { String(format: "%02.2hhx", $0) }.joined()
return hexString
}
}
用法:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.hexString
print(deviceTokenString)
}
func应用程序(application:UIApplication,DidRegisterForRemotionTificationswithDeviceToken deviceToken:Data)
{
让tokenChars=(deviceToken作为NSData).bytes.bindMemory(to:CChar.self,capacity:deviceToken.count)
var tokenString=“”
对于0中的i..获取设备令牌
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Convert token to string
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
}
希望这将帮助您获取设备登录的工作代码-iOS 11或更高版本,Swift 4 | Swift 5
请求用户权限
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let notificationTypes: UIUserNotificationType = [UIUserNotificationType.alert,UIUserNotificationType.badge, UIUserNotificationType.sound]
let pushNotificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
application.registerUserNotificationSettings(pushNotificationSettings)
application.registerForRemoteNotifications()
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(token)
}
获取设备令牌
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let notificationTypes: UIUserNotificationType = [UIUserNotificationType.alert,UIUserNotificationType.badge, UIUserNotificationType.sound]
let pushNotificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
application.registerUserNotificationSettings(pushNotificationSettings)
application.registerForRemoteNotifications()
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(token)
}
发生错误时
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("i am not available in simulator :( \(error)")
}
您可以按如下方式获取设备令牌:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print("Device Token : ",token)
}
使用以下代码获取设备令牌:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var token = ""
for i in 0..<deviceToken.count {
token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
}
print("Device Token = \(token)")
}
func应用程序(application:UIApplication,DidRegisterForRemotionTificationswithDeviceToken deviceToken:Data){
var token=“”
因为我在0..Swift 5
你可以用like
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let hexString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(hexString)
}
您可以同时使用此功能获取设备令牌和FCM令牌:
func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken
devicetoken: Data)
{
let deviceTokenString = deviceToken.hexString
print(deviceTokenString)
}
对于设备令牌,请使用以下命令:
func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken
devicetoken: Data)
{
let deviceTokenString = deviceToken.hexString
print(deviceTokenString)
}
对于FCM令牌,请使用以下命令:
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
userDefault.set(fcmToken, forKey: "fcmToken")
}
let deviceIds = UIDevice.current.identifierForVendor!.uuidString
对于UUID,请使用以下命令:
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
print("Firebase registration token: \(fcmToken)")
userDefault.set(fcmToken, forKey: "fcmToken")
}
let deviceIds = UIDevice.current.identifierForVendor!.uuidString
谢谢@Ahmad,但它的代码已被弃用。我的控件没有调用didRegisterForRemoteNotificationsWithDeviceToken委托。好吧,这将是另一个问题,如果该方法甚至无法访问,那么您将丢失一些内容…请重新检查通知的设置。在我的最后一个工作日,它工作正常。今天不知道为什么不禁用e跟踪问题%02.2hhx将做什么?请您解释一下。为什么在演示代码中使用应用程序
方法(请求用户权限
、获取设备令牌
和以防出错
)是否有不同的签名?是否存在可以处理上述所有情况的签名版本?@zionpi是的,您需要启用来自capabilities的推送通知,然后注册验证以获取令牌,这意味着可以一次调用这三种不同的应用程序
方法pp同时?@NikunjKumbhani@zionpi是,这都是为远程通知注册设备的委托方法