2013-02-25 85 views
1

我开始与apns,我们有一个方法在应用程序委托,我们收到apns令牌。我想把它发送给我的服务器,但只有当它不同于最后收到的令牌时(我认为这是正确的方式)。比较apns令牌作为字符串?

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
    NSString* newToken = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; 
    NSString* oldToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"lastToken"]; 

    if ([newToken isEqualToString:oldToken]) { 
     // Nothing to do, token hasn't changed. 
    } 
    else { 
     // 1) Send token up to my server. 
     // 2) On successful send, overwrite local copy of token. 
    } 
} 

我用我的服务器上,最终发送APNS信息库需要令牌作为字符串(我使用javapns)。所以我需要在某个时候转换它。我也想将它作为一个字符串在本地存储。有一个更好的方法吗?

最后,这两个字符串都会自动释放吗?

感谢

回答

2

对于APNS令牌,你应该将它们存储在十六进制,所以:

NSMutableString* binaryString = [NSMutableString stringWithCapacity:deviceToken.length]; 
unsigned char* bytes = (unsigned char*) [deviceToken bytes]; 
for (int i = 0 ; i < deviceToken.length ; i++) 
    [binaryString appendFormat:@"%02x", bytes[i]]; 

如果您使用ARC,那么他们将被自动释放。

1

我采取了类似的方法,因为你做的,我很喜欢它:

NSString *tt = [NSString stringWithFormat:@"%@",devToken]; 
NSString *deviceToken = [[tt substringWithRange:NSMakeRange(1, [tt length]-2)]stringByReplacingOccurrencesOfString:@" " withString:@""];  

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (![[defaults valueForKey:@"deviceToken"] isEqualToString:deviceToken]) { 
    [defaults setValue:deviceToken forKey:@"deviceToken"]; 
    [defaults synchronize]; 
}