1

私は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を使用しています)。だから私はある時点でそれを変換する必要があります。また、ローカルに文字列として保存したいと思います。これを行うためのより良い方法はありますか?

最後に、これらの文字列は両方とも自動リリースされますか?

ありがとう

4

2 に答える 2

2

APNS トークンの場合、それらを 16 進数で保存する必要があるため、次のようになります。

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 を使用している場合は、自動解放されます。

于 2013-02-25T15:13:25.227 に答える
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];
}
于 2013-02-25T15:19:08.430 に答える