1

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

Community
  • 1
  • 1
daniel
  • 1,446
  • 3
  • 29
  • 65

1 Answers1

1

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

daniel
  • 1,446
  • 3
  • 29
  • 65