Swift iOS 13 推送通知设备令牌在 javascript/php/typescript 中转换
Posted
技术标签:
【中文标题】Swift iOS 13 推送通知设备令牌在 javascript/php/typescript 中转换【英文标题】:Swift iOS 13 push notifications device token convert in javascript/php/typescript 【发布时间】:2019-11-28 10:19:07 【问题描述】:我有一个带有推送通知的 Swift 应用程序。每当设备注册设备令牌以接收推送通知时,我都会得到一个正常的字符串,例如:QY1WcHzcxSbAYPJa0OrTQwFhYZ3ilRUQ0HmKgUlP4IBsLQAJazZnZ4XuGrNO2l4S
。但是,在 ios 13 中,会以以下格式接收新的设备令牌: length = 32, bytes = 0xd3d997af 967d1f43 b405374a 13394d2f ... 28f10282 14af515f
。
我使用以下代码来转换新的设备令牌:
let deviceTokenString = deviceToken.map String(format: "%02x", $0) .joined()
这给了我一个 64 个字符的字符串。
原始应用程序不是在 swift 中构建的。如何在 javascript/php/typescript 中进行实现,在其中收到如下字符串: length = 32, bytes = 0xd3d997af 967d1f43 b405374a 13394d2f ... 28f10282 14af515f
并将其转换为:QY1WcHzcxSbAYPJa0OrTQwFhYZ3ilRUQ0HmKgUlP4IBsLQAJazZnZ4XuGrNO2l4S
【问题讨论】:
“让它工作”是什么意思。获取 64 个字符的字符串与您的预期行为有何不同? @usernumber 它在 Swift 中工作,但原始应用程序不是 Swift 应用程序。这就是为什么我要求在 javascript/php/typescript 中实现 【参考方案1】:对于 Swift 5.0,您需要使用以下代码。
class func string(fromDeviceToken deviceToken: Data?) -> String?
let length = deviceToken?.count ?? 0
if length == 0
return nil
let buffer = UInt8(deviceToken?.bytes ?? 0)
var hexString = String(repeating: "\0", count: length * 2)
for i in 0..<length
hexString += String(format: "%02x", buffer[i])
return hexString
如果你使用的是 Objective-C 那么你需要使用下面的代码:
+ (NSString *)stringFromDeviceToken:(NSData *)deviceToken
NSUInteger length = deviceToken.length;
if (length == 0)
return nil;
const unsigned char *buffer = deviceToken.bytes;
NSMutableString *hexString = [NSMutableString stringWithCapacity:(length * 2)];
for (int i = 0; i < length; ++i)
[hexString appendFormat:@"%02x", buffer[i]];
return [hexString copy];
您可以查看Apple Push Notification Forums
【讨论】:
我需要在 javascript/php/typescript 中实现而不是 swift/obj-c @Dicoyo 可能是这个链接可以帮助你。 ***.com/questions/13757330/…以上是关于Swift iOS 13 推送通知设备令牌在 javascript/php/typescript 中转换的主要内容,如果未能解决你的问题,请参考以下文章