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) }
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)
}
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)")
}
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
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)")
}
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)
}
Vous pouvez utiliser comme,
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let hexString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print(hexString)
}
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)")
}