首页 文章

我怎样才能在swift 4中获得deviceToken?

提问于
浏览
-1

我正在使用此代码获取设备令牌它在swift 3中工作但不在swift 4中工作请帮我解决它 .

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)
}

5 回答

  • 1

    假设您已经检查过所有内容都已设置正确,基于您的代码,它似乎应该可以正常工作,您所要做的就是将格式更改为 %02.2hhx 而不是 %02X 以获取相应的十六进制字符串 . 因此,你应该得到一个有效的 .

    作为一种好的做法,您可以将data extension添加到项目中以获取字符串:

    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)
    }
    
  • 0

    Working Code for getting deviceToken in - iOS 11 or greater, Swift 4

    Request user permission

    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        
    }
    

    Getting device token

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    
        let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
        print(token) 
    }
    

    In case of error

    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    
        print("i am not available in simulator \(error)")
    }
    
  • 0
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
        {
            let tokenChars = (deviceToken as NSData).bytes.bindMemory(to: CChar.self, capacity: deviceToken.count)
            var tokenString = ""
    
            for i in 0..<deviceToken.count {
                tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
            }
                        print("tokenString: \(tokenString)")
    }
    
  • 4

    获取设备令牌

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
            // Convert token to string
            let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    }
    

    希望对你有帮助

  • 0

    您可以像这样获取设备令牌:

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        let token = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
        print("Device Token : ",token)
    }
    

相关问题