Notifications APN的设备令牌采用什么编码?

Notifications APN的设备令牌采用什么编码?,notifications,push,device,token,apple-push-notifications,Notifications,Push,Device,Token,Apple Push Notifications,是否可以获取从应用程序返回的设备令牌:(UIApplication*)应用程序didRegisterForRemotionTificationswithDeviceToken:(NSData*)deviceToken方法?由于我不太擅长PHP,我希望我的用户手动将令牌输入到他们计算机上的程序中,该程序将用于发送通知。但是,我无法从这个方法中获取令牌。使用NSLog可以很好地记录日志,但是当我使用NSString initWithData:,我总是会得到一些神秘的东西。我想编码是错的吧 提前谢谢你

是否可以获取从应用程序返回的设备令牌:(UIApplication*)应用程序didRegisterForRemotionTificationswithDeviceToken:(NSData*)deviceToken方法?由于我不太擅长PHP,我希望我的用户手动将令牌输入到他们计算机上的程序中,该程序将用于发送通知。但是,我无法从这个方法中获取令牌。使用NSLog可以很好地记录日志,但是当我使用NSString initWithData:,我总是会得到一些神秘的东西。我想编码是错的吧


提前谢谢你的帮助

令牌是一个NSData对象,它指向原始二进制数据块,而不是字符串。将其转换为字符串的两种最常见的方法是:

  • base64编码它 下载
  • 使用NSData的-description获取字符串十六进制转储并清理它
  • NSString*str=[[deviceToken description]stringByReplacingOfString:@“with string:@]”的发生率;
    str=[str STRINGBYREPLACINGOURCRENCESOFSTRING:@“with string:@]”;
    

    我更喜欢#1,因为后者取决于NSData的-description调用的内部工作方式,但两者都应该工作。

    您可以获得十六进制字符串,而不必担心
    NSData
    description
    方法的行为,具有:

    + (NSString *)hexadecimalStringFromData:(NSData *)data {
        NSMutableString *hexToken;
        const unsigned char *iterator = (const unsigned char *) [data bytes];
        if (iterator) {
            hexToken = [[NSMutableString alloc] init];
            for (NSInteger i = 0; i < data.length; i++) {
                [hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
            }
            return hexToken;
        }
        return nil;
    }
    
    +(NSString*)十六进制StringFromData:(NSData*)数据{
    NSMutableString*hexToken;
    常量无符号字符*迭代器=(常量无符号字符*)[数据字节];
    if(迭代器){
    hexToken=[[NSMutableString alloc]init];
    对于(NSInteger i=0;i
    令牌是NSData。您可以将其转换为字符串,并删除和空格

    NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];
    
    
    NSLog(@"token: %@",devToken);
    
    NSString*devToken=[[deviceToken description]stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@”“];
    devToken=[devToken StringByReplacingOfString:@“with String:@”的发生率];
    NSLog(@“令牌:%@”,devToken);
    
    我使用base64方法,但使用“url安全”base64,这是一种编码,使生成的字符串在url中可以接受为-等。原始base64使用标准base64的“+”和“/”字符,分别替换为“-”和“\u64”。
    + (NSString *)hexadecimalStringFromData:(NSData *)data {
        NSMutableString *hexToken;
        const unsigned char *iterator = (const unsigned char *) [data bytes];
        if (iterator) {
            hexToken = [[NSMutableString alloc] init];
            for (NSInteger i = 0; i < data.length; i++) {
                [hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
            }
            return hexToken;
        }
        return nil;
    }
    
    NSString *devToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    devToken = [devToken stringByReplacingOccurrencesOfString:@" " withString:@""];
    
    
    NSLog(@"token: %@",devToken);