array - Swift 3.0 Datos a la cadena?
swift string to data (9)
Aquí está mi extensión de datos. agregue esto y puede llamar a data.ToString ()
import Foundation
extension Data
{
func toString() -> String?
{
return String(data: self, encoding: .utf8)
}
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
Quiero
deviceToken
para encadenar
pero:
let str = String.init(data: deviceToken, encoding: .utf8)
str
es
nil
swift 3.0
¿Cómo puedo dejar que los
data
string
?
¿Te registras para recibir notificaciones push en Xcode 8 / Swift 3.0? no funciona y la respuesta es hace unos meses, lo había intentado:
e imprimir:
Encontré la manera de hacerlo.
Necesita convertir
Data
a
NSData
:
let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)
Esto es mucho más fácil en Swift 3 y más tarde usando reduce:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.reduce("") { $0 + String(format: "%02x", $1) }
DispatchQueue.global(qos: .background).async {
let url = URL(string: "https://example.com/myApp/apns.php")!
var request = URLRequest(url: url)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = try! JSONSerialization.data(withJSONObject: [
"token" : token,
"ios" : UIDevice.current.systemVersion,
"languages" : Locale.preferredLanguages.joined(separator: ", ")
])
URLSession.shared.dataTask(with: request).resume()
}
}
Para ampliar la respuesta de weijia.wang:
extension Data {
func hexString() -> String {
let nsdataStr = NSData.init(data: self)
return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
}
}
deviceToken.hexString()
con
deviceToken.hexString()
Según el documento oficial de Apple, el token del dispositivo no se puede decodificar. Entonces, creo que lo mejor que puedes hacer es dejarlo así.
ENLACE: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html en la sección Arquitectura de seguridad
Si sus datos están codificados en base64.
if ( dataObj != nil ) {
let encryptedDataText = dataObj!.base64EncodedString(options: NSData.Base64EncodingOptions())
NSLog("Encrypted with pubkey: %@", encryptedDataText)
}
Versión Swift 4 de la respuesta de 4redwings:
let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8)
Vine buscando la respuesta a la pregunta de Swift 3 Data to String y nunca obtuve una buena respuesta. Después de perder el tiempo, se me ocurrió esto:
var testString = "This is a test string"
var somedata = testString.data(using: String.Encoding.utf8)
var backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String!
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()