4

特定のユーザーだけにプッシュ通知を送りたい。

Apple docs で経験したことから。プッシュ通知登録コードはこちら

- (void)applicationDidFinishLaunching:(UIApplication *)app {
   // other setup tasks here....
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}

// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes]; // custom method
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

メソッドappdidRegisterForRemoteNotifでは..作成されてサーバーに送信されるdevTokenバイトのみが表示されます..しかし、どのデバイストークンがどのユーザーに属しているかをどのように識別しますか。私のデバイス名が Shubhank の iPhone だとします。iPhone がこれで、これがデバイス トークンであるという情報を送信するにはどうすればよいですか。

4

3 に答える 3

6

通常、デリゲート メソッド自体でサーバー上の apns トークンを更新しません。それを保存し、後でユーザーを識別したときに更新します。

次の方法で実行できます。

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {

const unsigned *tokenBytes = [deviceToken bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                      ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                      ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                      ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
[[MyModel sharedModel] setApnsToken:hexToken];

}

これで、モデル オブジェクト (MyModel) に apns トークンが保存されました。その後、ユーザーを特定したときに(ログイン/サインアップまたはその他の方法で)

このメソッドを呼び出すことができます

[self sendProvidedDeviceToken: [[MyModel sharedModel] apnsToken] forUserWithId: userId];  //Custom method

このようにして、デバイス トークンをユーザーにリンクしました。お役に立てれば!

于 2012-02-04T15:19:44.877 に答える
2

カスタム メソッドに登録するときに、デバイス名を送信する必要があります。コードは次のようになります。アプリケーションが何らかのユーザー名を使用している場合は、ユーザー名など、コンテキストに適した情報を送信できます。トークンとデバイスを接続するサーバーにどの情報を送信するかは、ユーザー次第です。

// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes deviceName:[[UIDevice currentDevice] name]]; // custom method
}
于 2012-02-04T15:07:02.770 に答える
1

必要な情報を独自のプッシュ サービスに送信するのは、あなた次第です。

ただし、重要な点として、プッシュ トークンデバイス トークン (UDID) ではありません。プッシュ トークンは、それを要求する各アプリに固有であり、変更することができます。それに加えてデバイス名を取得したい場合は、 を呼び出して[[UIDevice currentDevice] name]、プッシュ トークンの保存に使用しているものに送信できます。

于 2012-02-04T15:03:23.970 に答える