daniel
daniel

Reputation: 966

How do I convert device token of type Data from Amazon SNS to a form I can put in setting to create endpoint in SNS?

I am able to get a device token from Amazon SNS using code in my iOS app. In order to create an endpoint for my application on the SNS side, I need this device token to be in the form of a text. I have tried to initialize a String object with every possible encoding available. None of the encoding options result in the correct format of the device token as it should look according to the example in Amazon SNS's documentation. It should look like this:

29z6j5c4 df46f809 505189c4 c83fjcgf 7f6257e9 8542d2jt 3395kj73

Here is my code in my AppDelegate class where I receive the device token and print every possible string encoding:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    application.registerForRemoteNotifications()
    
    return true
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    
    print(String(data: deviceToken, encoding: .ascii))
    print(String(data: deviceToken, encoding: .iso2022JP))
    print(String(data: deviceToken, encoding: .isoLatin1))
    print(String(data: deviceToken, encoding: .isoLatin2))
    print(String(data: deviceToken, encoding: .japaneseEUC))
    print(String(data: deviceToken, encoding: .macOSRoman))
    print(String(data: deviceToken, encoding: .nextstep))
    print(String(data: deviceToken, encoding: .nonLossyASCII))
    print(String(data: deviceToken, encoding: .shiftJIS))
    print(String(data: deviceToken, encoding: .symbol))
    print(String(data: deviceToken, encoding: .unicode))
    print(String(data: deviceToken, encoding: .utf16))
    print(String(data: deviceToken, encoding: .utf16BigEndian))
    print(String(data: deviceToken, encoding: .utf16LittleEndian))
    print(String(data: deviceToken, encoding: .utf32))
    print(String(data: deviceToken, encoding: .utf32BigEndian))
    print(String(data: deviceToken, encoding: .utf32LittleEndian))
    print(String(data: deviceToken, encoding: .utf8))
    print(String(data: deviceToken, encoding: .windowsCP1250))
    print(String(data: deviceToken, encoding: .windowsCP1251))
    print(String(data: deviceToken, encoding: .windowsCP1252))
    print(String(data: deviceToken, encoding: .windowsCP1253))
    print(String(data: deviceToken, encoding: .windowsCP1254))

}

Here are the print results:

Optional("ã*Î\u{1E}]NªÙ´\u{0E}\u{0E}±=T1ËêM¾DîT\u{1C}>p®|ð")

Optional("ã*Î\u{1E}]NªÙ´\u{0E}\u{0E}±=T1ËêM¾DîT\u{1C}>p®|ð")

Optional("ã*Î\u{1E}]NªÙ´\u{0E}\u{0E}±=T1ËêM¾DîT\u{1C}>p®|ð")

Optional("ă*Î\u{1E}]NŞŮ´\u{0E}\u{0E}ą=T1ËęMžDîT\u{1C}>pŽ|đ")

nil

Optional("„*Œ\u{1E}]N™Ÿå¥\u{0E}\u{0E}±=T1ÀÍáMæDÓT\u{1C}>pçÆ|ö")

Optional("ª*˛\u{1E}]N“äÌ·\u{0E}\u{0E}–=T1¸ŒÇM¬DôT\u{1C}>pÍfi|öÜ")

nil

nil

nil

Optional("츞嵎꫙貴ฎ넽吱쯪蝍비᰾炍깼")

Optional("츞嵎꫙貴ฎ넽吱쯪蝍비᰾炍깼")

Optional("츞嵎꫙貴ฎ넽吱쯪蝍비᰾炍깼")

Optional("⫣Ỏ九�뒌ฎ㶱ㅔ䶇䒾哮㸜走粮髰")

nil

nil

nil

nil

Optional("ă*Î\u{1E}]NŞŮŚ´\u{0E}\u{0E}±=T1Ëę‡MľDîT\u{1C}>pŤ®|đš")

Optional("г*О\u{1E}]NЄЩЊґ\u{0E}\u{0E}±=T1Лк‡MѕDоT\u{1C}>pЌ®|рљ")

nil

nil

nil

Upvotes: 1

Views: 72

Answers (1)

daniel
daniel

Reputation: 966

I take the Data object and use its base64EncodedString() method.

Upvotes: 1

Related Questions