Swift iOS 13推送通知设备令牌转换为javascript/php/typescript
我有一个带推送通知的Swift应用程序。每当设备注册设备令牌以接收推送通知时,我都会收到一个普通字符串,如:Swift iOS 13推送通知设备令牌转换为javascript/php/typescript,javascript,php,ios,swift,apple-push-notifications,Javascript,Php,Ios,Swift,Apple Push Notifications,我有一个带推送通知的Swift应用程序。每当设备注册设备令牌以接收推送通知时,我都会收到一个普通字符串,如:QY1WcHzcxSbAYPJa0OrTQwFhYZ3ilRUQ0HmKgUlP4IBsLQAJazZnZ4XuGrNO2l4S。但是,对于iOS 13,接收的新设备令牌格式为:{length=32,bytes=0xd3d997af 967d1f43 b405374a 13394d2f…28f10282 14af515f} 我使用以下代码转换新设备令牌: let deviceTokenSt
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
对于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
}
类函数字符串(来自deviceToken deviceToken:Data?)->string?{
设长度=deviceToken?.count±0
如果长度==0{
归零
}
let buffer=UInt8(deviceToken?.bytes±0)
var hexString=String(重复:“\0”,计数:长度*2)
对于0中的i.你说的“让它工作起来”是什么意思.usernumber它在Swift中工作,但原始应用程序不是Swift应用程序。这就是为什么我要求用javascript/php/typescript实现我需要用javascript/php/typescript而不是Swift/obj实现的原因-c@Dicoyo也许这个链接可以帮助你p你。
+ (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];
}