[英]Swift iOS 13 push notifications device token convert in javascript/php/typescript
我有一个带有推送通知的 Swift 应用程序。 每当设备注册设备令牌以接收推送通知时,我都会收到一个普通字符串,例如: QY1WcHzcxSbAYPJa0OrTQwFhYZ3ilRUQ0HmKgUlP4IBsLQAJazZnZ4XuGrNO2l4S
。 但是,在 iOS 13 中,会以以下格式接收新设备令牌: { length = 32, bytes = 0xd3d997af 967d1f43 b405374a 13394d2f ... 28f10282 14af515f }
。
我使用以下代码来转换新的设备令牌:
let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
这给了我一个 64 个字符的字符串。
原始应用程序不是快速构建的。 我怎样才能在 javascript/php/typescript 中实现一个像这样的字符串: { length = 32, bytes = 0xd3d997af 967d1f43 b405374a 13394d2f ... 28f10282 14af515f }
并将其转换为: QY1WcHzcxSbAYPJa0OrTQwFhYZ3ilRUQ0HmKgUlP4IBsLQAJazZnZ4XuGrNO2l4S
对于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 推送通知论坛
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.