デバイストークンのハードコーディングはプッシュ通知を送信できるデバイスを制限する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];
}