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 中转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将推送通知令牌存储到外部数据库 - iOS 10,Swift 3

iOS swift中没有收到推送通知?

获取推送通知的生产 iOS 设备令牌

用于开发和生产的 iOS 推送通知设备令牌

iOS APN 推送通知 - 设备令牌

如何在 aws sns 中注册 iOS 设备令牌以接收推送通知?