iOSアプリでのプッシュ通知

こんにちは、ガーディアン。

おそらく誰もがiOSにはプッシュ通知などの便利なサービスがあることを知っています。 私も気づいていましたが、その実際の使用に出会うまで、あまりにも多くのニュアンスがあることを知りませんでした。 このトピックでは、このサービスに関する2つの側面を学習します。xCodeで行う必要があることと、phpサーバー経由でプッシュメッセージを自分で送信する方法です。

カットの下で、それがすべてどのように機能するかについて説明します。



最近、新しいアプリケーションであるFamily Expensesを開発していたときに、Pushに出会いました。 そこで、Pushを使用してユーザーに同期要求を通知します。



プッシュ通知には、ローカルとリモートの2つの形式があります。 この記事では、ローカルのものは考慮しません。 それらはかなり単純な実装メカニズムを持ち、参考文献で詳細に説明されています。



リモートプッシュ通知メカニズムは次のとおりです。



  1. アプリケーションが起動すると、didRegisterForRemoteNotificationsWithDeviceTokenメソッドが呼び出され、インターネット接続が存在する場合、64文字のトークン文字列を返します。 この構造にはニュアンスがあります。何らかの理由で、文字の先頭と末尾に「<」と「>」があり、中央にスペースがあります。 したがって、これらの文字から行を削除する価値があります。
  2. トークンをサーバーに送信して、トークンを保存する必要があります。 実際、これはアプリケーションとデバイスの一意のアドレスです。 それを介して、プッシュ通知が送信されます。 以下のコードは、段落1および2で説明したメカニズムを示しています。



    - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { NSMutableString *tokenString = [NSMutableString stringWithString: [[deviceToken description] uppercaseString]]; [tokenString replaceOccurrencesOfString:@"<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@" " withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; NSLog(@"Token: %@", tokenString); if (tokenString) { [[NSUserDefaults standardUserDefaults] setObject:tokenString forKey:@"token"]; } NSString *urlFormat = @"http://your.domain.com/regDevice.php?deviceToken=%@"; NSURL *registrationURL = [NSURL URLWithString:[NSString stringWithFormat: urlFormat, tokenString]; NSMutableURLRequest *registrationRequest = [[NSMutableURLRequest alloc] initWithURL:registrationURL]; [registrationRequest setHTTPMethod:@"PUT"]; NSURLConnection *connection = [NSURLConnection connectionWithRequest:registrationRequest delegate:self]; [connection start]; [registrationRequest release]; }
          
          





    アプリケーション側では、これは、着信メッセージを処理するメカニズムを除いて、ほとんどすべてです。
  3. 必要に応じて、サーバーはプッシュ通知の送信を初期化します。受信者アドレスはトークンです。 これを行うには、サーバーには、Provisioning Portal-> App IDs-> App IDの反対側のConfigureセクションでdeveloper.apple.comから取得できるプッシュ証明書が必要です。 証明書の作成方法に関する段階的な指示があるため、このプロセスについては詳しく説明しません。

    ただし、その証明書はサーバーに完全に適しているわけではありません。 また、処理して開発者証明書と組み合わせる必要があります。

    詳細な手順については、 こちらをご覧ください




サーバーにメッセージを送信するには、PHPでホストしている場合、上記のリンクの指示に従って生成された証明書をインストールする必要があります。

私のサーバーでは、Apple Push Notificationサービスと対話するためのオープンソースクラスであるApnsPHPを使用しました。

すべてが非常にシンプルで便利です。 最も重要なことは、ハーフキックで始まることです。 code.google.com/p/apns-php

また、着信プッシュメッセージを処理するメカニズムを備えたxCodeのサンプルプロジェクトもあります。



一般的な場合-それは実質的にすべてです。



今、私が遭遇したニュアンス。

Appleにメッセージを送信するために2つのサーバーが提供されました。

ssl://gateway.push.apple.com:2195

ssl://gateway.sandbox.push.apple.com:2195






1つ目は完成した製品に使用され、2つ目はテスト用のサンドボックスに使用されます。

デバッグモードで開発者プロビジョニングプロファイルを使用してアプリケーションをテストしている場合は、サーバーでテストするときにサンドボックスを使用します。 アドホックリリースを行う、つまり、配布証明書でアプリケーションに署名すると、サンドボックスは機能しません。 これについて書いているのは、私自身がなぜ機能しないのかを長い間理解できなかったからです。

トークンデータベースを無効になったアドレスから削除するための特別なメカニズムもあります。 たとえば、アプリケーションがデバイスから削除された場合。

これを行うには、ApnsPHPを使用できます。このためのメカニズムもあります。



メカニズムを非常に簡単に説明したことを願っています。

UPD。

ちょうど実験した。 トークンは、特定のデバイス用、または多分1人の開発者用です。 バンドルIDが異なると、同じトークンが取得されるためです。 ただし、どのアプリケーションに送信するか-これにより、サーバー上にある証明書が決まります。



All Articles