Swift 3 - dispositif de jetons maintenant être analysée comme '32BYTES'
Je viens de mettre à jour de Xcode 7 au 8 GM et au milieu de la Swift 3 problèmes de compatibilité, j'ai remarqué que mon appareil jetons ont cessé de travailler. Maintenant ils seulement lu '32BYTES'.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
print(deviceToken) //Prints '32BYTES'
print(String(data: deviceToken , encoding: .utf8)) //Prints nil
}
Avant la mise à jour j'ai été en mesure de simplement envoyer de l'NSData à mon serveur, mais maintenant, je vais avoir un moment difficile en fait de l'analyse du jeton.
Ce qui me manque ici?
Edit: je viens de tester la conversion de retour à NSData et je vois les résultats attendus. Alors maintenant, je suis juste confus sur le nouveau type de Données.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
print(deviceToken) //Prints '32BYTES'
print(String(data: deviceToken , encoding: .utf8)) //Prints nil
let d = NSData(data: deviceToken)
print(d) //Prints my device token
}
- Changer de
NSData
imprime simplement ledescription
de laNSData
. Vous n'avez toujours pas obtenir une chaîne de caractères à partir de cela.
Vous devez vous connecter pour publier un commentaire.
%02x
est bien aussi.%02.2hhx
et%02x
nshipster.com/apns-device-tokens/#overturned-in-ios-13J'ai eu le même problème. C'est ma solution:
NSData
dans une chaîne. J'ai suggéré à l'aide de l'encodage base64 dans ma réponse. Il utilise base16 encodage.Voici ma Swift 3 extension pour obtenir une base 16 codé chaîne hexadécimale:
L'appareil jeton n'a jamais été une chaîne de caractères, et certainement pas une codé en UTF-8 chaîne. C'est des données. C'est de 32 octets de données opaques.
La seule façon valable de convertir les données opaques en une chaîne de caractères est l'encoder - souvent par le biais d'un encodage base64.
Dans Swift 3/iOS 10, il suffit d'utiliser la
Data base64EncodedString(options:)
méthode.NSData
ouData
, il n'a pas d'importance. Les octets de données ne sont pas et n'ont jamais été une chaîne de caractères. La documentation indique clairement qu'il est opaque ensemble de données. Le fait que votre code utilisé pour le travail est une chance. C'était toujours la mauvaise façon de le gérer. Simplement de convertir les données d'une chaîne de caractères en encodage base64 les données. C'est la bonne solution maintenant et avant.Essayez ceci:
essayer cette
La plus simple et la meilleure façon.
Ce n'est pas déclaré comme une réponse officielle (vu dans un commentaire), mais est ce que j'ai fait pour obtenir mon jeton rentré dans l'ordre.
as NSData
là. lorsque vous mettez comme NSData pas de Données sera de retour la valeur correcte, même sur iOS 10J'ai juste fait ce,
il a donné le même résultat que,
Obtenir de l'appareil jeton avec le bon format.