স্ট্রিংয়ে 3.0 ডেটা সুইচ্ট করবেন?


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

আমি deviceTokenস্ট্রিং করতে চাই

তবে:

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

str হয় nil

দ্রুত 3.0

কীভাবে আমি দেওয়া যাবে dataথেকে string?

এক্সকোড 8 / সুইফট 3.0 এ পুশ বিজ্ঞপ্তিগুলির জন্য নিবন্ধকরণ? কাজ করছে না এবং উত্তরটি কয়েক মাস আগে, আমি চেষ্টা করেছিলাম:

এখানে চিত্র বর্ণনা লিখুন

এবং মুদ্রণ:

এখানে চিত্র বর্ণনা লিখুন


18
পরের বার আপনি কাউকে আপনার কোডটি চেষ্টা করে দেখতে বলুন এটি চিত্র হিসাবে আটকানো হয়নি তা নিশ্চিত করুন ..
ডেসডেনোভা

কেউ যখন একটি ফাইল পড়া এই জুড়ে আসে, চেক যে ফাইল UTF8 হওয়া এনকোড হল: file -I /path/to/file.txt। আইকনভি ব্যবহার করে রূপান্তর না করা হলে:iconv -f UTF-16LE -t UTF-8 /path/to/file.txt > /path/to/utf8/file.txt
পুলকিত গোয়াল

উত্তর:


157

আমি স্ট্রিং প্রশ্নে সুইফট 3 ডেটার উত্তর খুঁজছিলাম এবং কখনও ভাল উত্তর পাই নি। কিছুটা বোকা হওয়ার পরে আমি এটিকে সামনে এলাম:

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!

4
আমি আপনার উত্তর চেষ্টা করেছিলাম। এটি অন্য ফাঙ্কে কাজ করেছে, কিন্তু এতে কাজ করছে না func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)I কেন জানি না?
weijia.wang

ডিভাইস টোকেনটি কোনও utf8 স্ট্রিং নয়, এটি কাঁচা বাইনারি
হগডটম্যাক

সুতরাং এটি কাঁচা বাইনারি হলে কি করবেন?
কিংয়ালিয়ন

String.Encoding.utf8.rawValue - সর্বশেষতম সুইফ্টের যে কারও জন্য
স্টিফেন জে

4
: ব্যবহার টোকেন ডিকোড করার জন্য didRegisterForRemoteNotificationsWithDeviceToken এই দেখতে stackoverflow.com/questions/37956482/...
pw2

34

এখানে আমার ডেটা এক্সটেনশন। এটি যোগ করুন এবং আপনি ডেটা কল করতে পারেন। টুস্ট্রিং ()

import Foundation

extension Data
{
    func toString() -> String?
    {
        return String(data: self, encoding: .utf8)
    }
}

এটি অত্যন্ত খারাপ কোডিং - আপনার এটিকে কখনই আনার্প করা উচিত নয় যেহেতু এনকডিং সর্বদা ব্যর্থ হতে পারে এবং এটি অ্যাপটিকে ক্র্যাশ করে। পরিবর্তে খুব ভাল কারণে অ্যাপল এপিআইয়ের মতো একটি APIচ্ছিক স্ট্রিং ফিরিয়ে দিন।
ওয়াল্টার হোয়াইট

অ্যাপ্লিকেশনটিতে ওয়াল্টারওয়াইট হ্যাঁ আমি alচ্ছিক স্ট্রিংটি ফিরিয়ে দিই। তবে এই উত্তরটি আপডেট করে না, মন্তব্যের জন্য ধন্যবাদ
লুহুইয়া

4
আপনি যদি প্যারামিটার হিসাবে এনকোডিংটি পাস করেন তবে এটি পছন্দ করে তবে .utf8 এ ডিফল্ট করুন আপনি যদি এটি চান তবে এটি একটি একক এনকোডিং টাইপের চেয়ে বেশি জন্য ব্যবহার করতে পারেন।
মিকাঃ মন্টোয়া


7

আমি এটি করার উপায় খুঁজে পেয়েছি। আপনাকে রূপান্তর করা দরকারData করতে হবে NSData:

let characterSet = CharacterSet(charactersIn: "<>")
let nsdataStr = NSData.init(data: deviceToken)
let deviceStr = nsdataStr.description.trimmingCharacters(in: characterSet).replacingOccurrences(of: " ", with: "")
print(deviceStr)

4
এটি কোন চরিত্রটি?
কিংয়ালিয়ন

সুইফট সহ এনএসডিটা ব্যবহার করা এড়ানো যাক।
ব্রেইনন

এই পদ্ধতিটি ব্যবহার করবেন না। এটি অনিরাপদ।
বোগদান

2

এটি সুইফট 3 এ আরও সহজ এবং পরে হ্রাস ব্যবহার করে:

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

2

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)


0

ওয়েজিয়া.ওয়াংয়ের উত্তরটি প্রসারিত করতে:

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

এটি দিয়ে ব্যবহার করুন deviceToken.hexString()


0

যদি আপনার ডেটা বেস 64 এনকোড করা থাকে।

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

0

নীচে অ্যাপল ডকের মতে, ডিভাইস টোকেনটি ডিকোড করা যাবে না। সুতরাং, আমি মনে করি সবচেয়ে ভাল কাজটি কেবল তা ছেড়ে দেওয়া।

https://developer.apple.com/library/content/docamentation/NETworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html

সুরক্ষা আর্কিটেকচার

একটি ডিভাইস টোকেন হল একটি অস্বচ্ছ এনএসডিটা উদাহরণ যা অ্যাপল দ্বারা নির্দিষ্ট ডিভাইসের একটি নির্দিষ্ট অ্যাপ্লিকেশনটিতে নির্ধারিত একটি অনন্য সনাক্তকারী রয়েছে। কেবলমাত্র এপিএনগুলি কোনও ডিভাইস টোকনের সামগ্রী ডিকোড করতে এবং পড়তে পারে। প্রতিটি অ্যাপ্লিকেশন উদাহরণটি এপিএনগুলির সাথে নিবন্ধভুক্ত হওয়ার সময় তার অনন্য ডিভাইস টোকনটি গ্রহণ করে এবং তারপরে অবশ্যই টোকনটিকে তার সরবরাহকারীর কাছে ফরোয়ার্ড করা উচিত, যেমন রিমোট নোটিফিকেশন সহায়তা কনফিগারেশনে বর্ণিত হয়েছে। সরবরাহকারীকে অবশ্যই প্রতিটি ধাক্কা বিজ্ঞপ্তির অনুরোধে ডিভাইস টোকেন অন্তর্ভুক্ত করতে হবে যা সম্পর্কিত ডিভাইসকে লক্ষ্য করে; বিজ্ঞপ্তিটি কেবলমাত্র অনন্য অ্যাপ্লিকেশন-ডিভাইস সংমিশ্রণে বিতরণ করা হয়েছে তা নিশ্চিত করার জন্য এপিএনগুলি ডিভাইস টোকেন ব্যবহার করে।


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

    }

0

দ্রুত 5 জন্য

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")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.