string - 如何将数据类型的设备令牌从 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Ќ®|рљ")
零
零
零
解决方案
我采用 Data 对象并使用它的 base64EncodedString() 方法。
推荐阅读
- html - React 应用程序不透明度转换在 Chrome 中不起作用
- spring - 如何将异常从 tcp 出站网关传播到上游 SI 组件
- angular - 如何与 *ngFor 绑定
Angular 谷歌地图 - java - 如何在几毫秒内将数千条记录更新到 MySQL 数据库中
- mysql - 想在汇总 1 列的同时从 3 个表中获取数据
- google-speech-api - 显示转录 Google Speech API 中每个单词的置信度分数
- sql - 对 IN 子句 Oracle 使用子查询
- python - IOError:[Errno 2] 没有这样的文件或目录:.../build/outputs/apk/yolo-debug.apk'
- jenkins - 使用 Jenkins 构建两个 git 存储库
- javascript - babel 无法识别 jsx 语法... SyntaxError: Unexpected token (25:1)