2013-02-25 81 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]; 
}