【问题标题】:Swift iOS 13 push notifications device token convert in javascript/php/typescriptSwift iOS 13 推送通知设备令牌在 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 中实现

标签: javascript php ios swift apple-push-notifications


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多