美文网首页
iOS Device Token

iOS Device Token

作者: 西西的一天 | 来源:发表于2020-04-18 13:42 被阅读0次

    当获取到device token后,AppDelegate将触发didRegisterForRemoteNotificationsWithDeviceToken方法,传入的参数是一个Data类型,而我们需要的是一个string,Swift在解析Data上比较简单:

    let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
    

    对Data类型进行map操作,其中每一个element是一个UInt8%02x则将这个UInt8转换为十六进制输出,02是在指明输出两位,若不够两位则前面补零,简单直接。

    在Objective-C中要如何操作呢?查阅了一下资料后,最佳方案为:

    const char *data = [deviceToken bytes];
    NSMutableString *tokenStr = [NSMutableString string];
    for (int i = 0; i < [deviceToken length]; i++) {
      [tokenStr appendFormat:@"%02.2hhx", data[i]];
    }
    

    NSData的bytes将得到一个char数组,而我们需要将char进行格式化输出后append到一个NSString里,不容易理解的就是这个格式化输出符%02.2hhx。其中02和swift相同,hhx指明data[i]是一个unsigned char类型(hx - unsigned short),hhx前面的2指明两位,和%02用意上略有相同。可以参考https://www.yawintutor.com/format-specifiers-in-c/这篇博客了解.的用意。这里给出这篇博客中的一个例子:

    #include <stdio.h>
    
    int main(int argc, char** argv) {
        char s[] = "YawinTutor"; 
        printf("value actual                : [%s]\n", s); 
        printf("value with number           : [%15s]\n", s); 
        printf("value with minus+number     : [%-15s]\n", s); 
        printf("value with number+dot       : [%15.5s]\n", s); 
        printf("value with minus+number+dot : [%-15.5s]\n", s); 
    
        printf("value with dot              : [%.5s]\n", s); 
        printf("value with minus            : [%-s]\n", s); 
        printf("value with minus+dot        : [%-.5s]\n", s); 
        return 0;
    }
    

    Output

    value actual                : [YawinTutor]
    value with number           : [     YawinTutor]
    value with minus+number     : [YawinTutor     ]
    value with number+dot       : [          Yawin]
    value with minus+number+dot : [Yawin          ]
    value with dot              : [Yawin]
    value with minus            : [YawinTutor]
    value with minus+dot        : [Yawin]
    

    相关文章

      网友评论

          本文标题:iOS Device Token

          本文链接:https://www.haomeiwen.com/subject/gslwactx.html