首页 > 解决方案 > 如何将数据类型的设备令牌从 Amazon SNS 转换为可以放入设置中以在 SNS 中创建终端节点的表单?

问题描述

我可以使用 iOS 应用程序中的代码从 Amazon SNS 获取设备令牌。为了在 SNS 端为我的应用程序创建端点,我需要此设备令牌采用文本形式。我试图用所有可能的编码来初始化一个 String 对象。根据 Amazon SNS 文档中的示例,任何编码选项都不会产生正确的设备令牌格式。它应该如下所示:

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

这是我的 AppDelegate 类中的代码,我在其中接收设备令牌并打印所有可能的字符串编码:

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

}

以下是打印结果:

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

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

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

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

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

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

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

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

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

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

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

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

标签: stringtype-conversionamazon-snsdevicetoken

解决方案


我采用 Data 对象并使用它的 base64EncodedString() 方法。


推荐阅读