繁体   English   中英

Swift iOS 13 推送通知设备令牌在 javascript/php/typescript 中转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM