반응형
신속한 3.0 데이터를 문자열로?
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
나는 deviceToken
끈을 원한다
그러나:
let str = String.init(data: deviceToken, encoding: .utf8)
str
이다 nil
스위프트 3.0
내가 어떻게 할 수 data
에 string
?
Xcode 8 / Swift 3.0에서 푸시 알림에 등록 하시겠습니까? 작동하지 않고 대답은 몇 달 전에 시도했습니다.
및 인쇄 :
Swift 3 Data to String 질문에 대한 답을 찾고 왔지만 좋은 답을 얻지 못했습니다. 약간의 장난 후에 나는 이것을 생각해 냈습니다.
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!
여기 내 데이터 확장이 있습니다. 이것을 추가하면 data.ToString ()을 호출 할 수 있습니다.
import Foundation
extension Data
{
func toString() -> String?
{
return String(data: self, encoding: .utf8)
}
}
let str = deviceToken.map { String(format: "%02hhx", $0) }.joined()
나는 그것을 할 방법을 찾았다. 당신은 변환 할 필요가 Data
로 NSData
:
let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)
이는 Swift 3 이상에서 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()
}
}
4redwings의 답변의 Swift 4 버전 :
let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8)
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()
Apple 공식 문서에 따르면 장치 토큰을 디코딩 할 수 없습니다. 그래서 최선의 방법은 그대로 두는 것입니다.
링크 : 보안 아키텍처 섹션의 https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html
데이터가 base64로 인코딩 된 경우.
if ( dataObj != nil ) {
let encryptedDataText = dataObj!.base64EncodedString(options: NSData.Base64EncodingOptions())
NSLog("Encrypted with pubkey: %@", encryptedDataText)
}
참고 URL : https://stackoverflow.com/questions/39616821/swift-3-0-data-to-string
반응형
'program story' 카테고리의 다른 글
Java 8 Lambda 표현식-중첩 클래스의 여러 메서드는 어떻습니까? (0) | 2020.10.09 |
---|---|
Docker 실행 및 생성 (0) | 2020.10.09 |
교차 엔트로피 란 무엇입니까? (0) | 2020.10.09 |
Python의 SQL 문에서 변수를 사용하는 방법은 무엇입니까? (0) | 2020.10.09 |
Windows 응용 프로그램에서 상대 경로를 절대 경로로 변환하는 방법은 무엇입니까? (0) | 2020.10.09 |