我开始使用apns,我们在app委托中有一个方法,我们收到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)。所以我需要在某个时候转换它。我还想将它作为字符串存储在本地。有更好的方法吗?
最后,这两个字符串都会被自动释放吗?
谢谢
答案 0 :(得分: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 :(得分: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];
}