programing

3.0 데이터를 문자열로 신속하게 이동할 수 있습니까?

sourcejob 2023. 9. 6. 22:02
반응형

3.0 데이터를 문자열로 신속하게 이동할 수 있습니까?

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

나는 되고 싶다.deviceToken끈을 매다

그러나:

let str = String.init(data: deviceToken, encoding: .utf8)

strnil

신속한 3.0

어떻게 해야 할까요?data로.string?

Xcode 8/Swift 3.0에서 Push Notifications를 등록하면 작동하지 않습니다. 몇 달 전에 사용해 본 적이 있습니다.

enter image description here

인쇄:

enter image description here

스위프트 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!

여기 제 데이터 확장입니다.이것을 추가하면 데이터를 호출할 수 있습니다.대상 문자열()

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()
    }
}

레드윙 4의 스위프트 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)

사용할 수도 있습니다.let data = String(decoding: myStr, as: UTF8.self)여기 데이터를 문자열로 변환하는 것에 대한 리소스가 있습니다.

속히

let testString = "This is a test string"
let somedata = testString.data(using: String.Encoding.utf8)
let backToString = String(data: somedata!, encoding: String.Encoding.utf8) as String?
print("testString > \(testString)")
//testString > This is a test string
print("somedata > \(String(describing: somedata))")
//somedata > Optional(21 bytes)
print("backToString > \(String(describing: backToString))")
//backToString > Optional("This is a test string")

웨이지아의 답변을 확대합니다.wang:

extension Data {
    func hexString() -> String {
        let nsdataStr = NSData.init(data: self)
        return nsdataStr.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "")
    }
}

와 함께 사용합니다.deviceToken.hexString()

데이터가 base64 인코딩된 경우.

if ( dataObj != nil ) {
    let encryptedDataText = dataObj!.base64EncodedString(options: NSData.Base64EncodingOptions())
    NSLog("Encrypted with pubkey: %@", encryptedDataText)
}

아래 애플 문서에 따르면 디바이스 토큰은 디코딩이 불가능합니다.그래서 저는 그냥 두는 것이 최선이라고 생각합니다.

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html

보안아키텍처

장치 토큰은 Apple이 특정 장치의 특정 앱에 할당한 고유 식별자를 포함하는 불투명 NSData 인스턴스입니다.APN만 디바이스 토큰의 내용을 해독하고 읽을 수 있습니다.각 앱 인스턴스는 APN에 등록할 때 고유한 장치 토큰을 수신한 다음 원격 알림 지원 구성에 설명된 대로 토큰을 해당 공급자에게 전달해야 합니다.공급자는 연결된 장치를 대상으로 하는 각 푸시 알림 요청에 장치 토큰을 포함해야 합니다. APN은 장치 토큰을 사용하여 해당 장치가 의도하는 고유한 앱-장치 조합에만 알림이 전달되도록 합니다.

let urlString = baseURL + currency

    if let url = URL(string: urlString){
        let session = URLSession(configuration: .default)        
        let task = session.dataTask(with: url){ (data, reponse, error) in
            if error != nil{
                print(error)
                return
            }


            let dataString = String(data: data!, encoding: .utf8)
            print(dataString)

        }

        task.resume()

    }

언급URL : https://stackoverflow.com/questions/39616821/swift-3-0-data-to-string

반응형