3

私は自分のアプリにプッシュ通知を実装しようとしていますが、私が信じていることは、ばかげた質問かもしれません。プッシュ通知は機能していますが、サーバー上のasp.netコードにデバイストークンを挿入しているため、機能します。

私の質問は、アプリが取得するデバイストークンを追跡することになっていますか?つまり、アプリが起動してデバイストークンを取得したら、それらをサーバーに送信して保存し、アプリのすべてのユーザーに通知を送信する必要があるときにリストを確認できるようにする必要がありますか?トークンの数と各デバイストークンに通知を送信しますか?

あなたが推測したように、あなたがもたらすことができるどんな明快さにも感謝します、これはプッシュ通知での私の最初の試みです。

4

2 に答える 2

1

You have to store the device tokens in a database. Then you send a notification addressed to each device token. You can create the system by yourself, but there are open source libraries that have done this already. Although it is for PHP, Easy APNS is an example.

于 2012-11-15T17:53:45.233 に答える
0

デバイストークンのハードコーディングはプッシュ通知を送信できるデバイスを制限する1つの方法であることがわかったので、私はこのシナリオに遭遇しましたが、アプリをダウンロードしたデバイスを許可する場合は、送信するメカニズムを作成する必要がありますプッシュ通知がサーバーに送信されるように、デバイスのデバイストークンをサーバーに送信します。アプリの読み込み時にサーバーにこのリクエストを設定できます。私の場合、サイレントに成功し、失敗した場合は、通知リストに追加されていないことをユーザーに通知します。

これは、チャットプログラムを作成するraywenderlich.comの例です。--基本的に、データベースに保存しているデバイス情報を使用してPOSTリクエストを作成し、後でDB情報にアクセスして、通知を繰り返し送信します。

いくつかの関連コード:

- (void)postJoinRequest
{
    MBProgressHUD* hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.labelText = NSLocalizedString(@"Connecting", nil);

    NSURL* url = [NSURL URLWithString:ServerApiURL];
    __block ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];

    [request setPostValue:@"join" forKey:@"cmd"];
    [request setPostValue:[dataModel udid] forKey:@"udid"];
    [request setPostValue:[dataModel deviceToken] forKey:@"token"];
    [request setPostValue:[dataModel nickname] forKey:@"name"];
    [request setPostValue:[dataModel secretCode] forKey:@"code"];

    [request setCompletionBlock:^
    {
        if ([self isViewLoaded])
        {
            [MBProgressHUD hideHUDForView:self.view animated:YES];

            if ([request responseStatusCode] != 200)
            {
                ShowErrorAlert(NSLocalizedString(@"There was an error communicating with the server", nil));
            }
            else
            {
                [self userDidJoin];
            }
        }
    }];

    [request setFailedBlock:^
    {
        if ([self isViewLoaded])
        {
            [MBProgressHUD hideHUDForView:self.view animated:YES];
            ShowErrorAlert([[request error] localizedDescription]);
        }
    }];

    [request startAsynchronous];
}
于 2012-11-15T17:23:46.223 に答える