【问题标题】:How to convert iOS Device Token String back to NSData如何将 iOS 设备令牌字符串转换回 NSData
【发布时间】:2017-01-09 19:33:50
【问题描述】:

我敢肯定这个问题以前有人问过,但我一生都找不到正确的答案。

在 Objective-C 中你有这个:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

这很好,deviceToken 不是字符串,因此通常您将其转换为字符串并将其发送到需要 NSData 的方法(确切的目标示例:

[[ETPush pushManager] registerDeviceToken:deviceToken];

一切都很好:)

问题是,在我的设置中,我从 外部 原始 deviceToken 函数调用该方法,因此我实际上已经可以将令牌作为字符串访问。所以我需要做的就是将该字符串 back 转换为 deviceToken NSData 对象。我可以这样做将其转换为 NSData 对象:

NSData *deviceToken = [stringToken dataUsingEncoding:NSUTF8StringEncoding];

但问题是,当我查看描述时,我会得到如下信息:

<63333833 30613765 ... 64386561 30653861 61356164 31353338 35623665 34396563>

如果您查看该问题的每一个实现,如何将 NSData 设备令牌转换为 NSString? 他们会回答类似这样的内容(或使用字节的类似内容):

NSString * deviceTokenString = [[[[deviceToken description]
                     stringByReplacingOccurrencesOfString: @"<" withString: @""] 
                    stringByReplacingOccurrencesOfString: @">" withString: @""] 
                   stringByReplacingOccurrencesOfString: @" " withString: @""];

你可以想象,把上面我发布的那个字符串用在那个方法中,它会创建类似的东西:

6333383330613765....etc.

这显然不是我的设备令牌 :)

那么问题来了!

如何将其转换回可以发送给这些方法的 NSData 对象?

【问题讨论】:

    标签: ios objective-c push-notification


    【解决方案1】:

    我明白了!我可以使用这个非常有用的链接来做到这一点:

    http://iphoneappcode.blogspot.com/2012/04/nsdata-to-hexstring-and-hexstring-to.html

    - (NSData *)dataFromHexString:(NSString *)string
    {
        NSMutableData *stringData = [[[NSMutableData alloc] init] autorelease];
        unsigned char whole_byte;
        char byte_chars[3] = {'\0','\0','\0'};
        int i;
        for (i=0; i < [string length] / 2; i++) {
            byte_chars[0] = [string characterAtIndex:i*2];
            byte_chars[1] = [string characterAtIndex:i*2+1];
            whole_byte = strtol(byte_chars, NULL, 16);
            [stringData appendBytes:&whole_byte length:1];
        }
        return stringData;
    }
    

    然后:

    NSData *deviceToken = [self dataFromHexString:myStringToken];
    

    :)

    【讨论】:

    • 为我工作!如果您像 string 一样保存它并在需要形成它 NSData 之后,使用 deviceToken 确实会帮助您。谢谢!
    • 谢谢你,正是我所寻找的!
    猜你喜欢
    • 2012-03-11
    • 2019-02-15
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2010-12-07
    相关资源
    最近更新 更多