web-dev-qa-db-fra.com

Comment puis-je obtenir deviceToken dans Swift 4?

J'utilise ce code pour obtenir le jeton d'appareil qu'il fonctionnait dans Swift 3 mais ne fonctionne pas dans Swift 4 S'il vous plaît, aidez-moi à le résoudre.

 
 si #disponible (iOS 10.0, *) {
 let center = UNUserNotificationCenter.current () 
 center.requestAuthorization (options: [. badge, .alert , .sound]) {(accordé, erreur) dans 
} 
} 
 application func (_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
 
 let deviceTokenString = deviceToken.reduce ("", {$ 0 + String (format: "% 02X") , $ 1)}) 
 Imprimer (deviceTokenString) 
} 
6
Sandip Gill

En supposant que vous avez déjà vérifié que tout a été correctement configuré, en fonction de votre code, il semble que cela devrait fonctionner correctement, tout ce que vous avez à faire est de changer le format en %02.2hhx au lieu de %02X pour obtenir la chaîne hexadécimale appropriée. Vous devriez donc en obtenir un valide.

Comme bonne pratique, vous pouvez ajouter extension de données dans votre projet pour obtenir la chaîne:

import Foundation

extension Data {
    var hexString: String {
        let hexString = map { String(format: "%02.2hhx", $0) }.joined()
        return hexString
    }
}

Usage:

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let deviceTokenString = deviceToken.hexString
    print(deviceTokenString)
}
28
Ahmad F

Code de travail pour obtenir deviceToken dans - iOS 11 ou supérieur, Swift 4

Demander la permission de l'utilisateur

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        
}

Obtention du jeton d'appareil

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
    print(token) 
}

En cas d'erreur

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

    print("i am not available in simulator :( \(error)")
}
11
Nikunj Kumbhani

Pour obtenir un jeton d'appareil

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

J'espère que ceci vous aidera

1
Ganesh Manickam
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)")
}
1
Uma Madhavi

Vous pouvez obtenir le jeton d'appareil comme ceci:

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

Swift 5

Vous pouvez utiliser comme,

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

Utilisez le code ci-dessous pour obtenir le jeton d'appareil:

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



}
0
Pankaj Jangid