Edit
APNsとは?

Apple Push Notification Servicesの略。デバイスに対してアプリが起動していなくても、通知を行う事ができるアップルが提供する通知補助サービス。

Edit
実際の通知までの流れ

  1. アプリ作成時に、APNs対応としたアプリIDを作成し、アプリをAppStoreに乗せる時には、そのアプリIDを利用したプロビジョニングファイルを利用することで、最初にアプリのAPNsに対する許諾を得る。
  2. アプリの起動時の処理に、APNsに対して自端末のデバイストークンを発行してもらう。
  3. 発行されたデバイストークンは、端末に識別に利用されるので、アプリは通知者が管理する、デバイスリストに自分のデバイストークンを追加する。(これは、APNsが提供しないので、自社のアプリサービスの一環として作成される機能)
  4. 通知者は、登録されたデバイストークン情報を元に、APNsを通じて登録されているデバイス(デバイストークンを使って)に通知を行う。
  5. 各デバイスは、アプリが起動していなくてもバッチ(アプリの上に1などの数字がのるマークを指す)を増やしたり、アプリ起動時にメッセージを表示させたりできる。

Edit
具体的な実装について

Edit
クライアント

クライアント側の実装は難しくない。アプリ起動時に自分のデバイストークンの取得をAPNsに行い、その後は、通知を受け取るだけである。

Edit
デバイストークン取得

アプリは、application起動の中で、

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];

の1行を呼びだけで良い。(この例では、バッチ、サウンド、アラートの3つの通知を受け取る許可を出している。)

これで、APNsから、デバイストークンが送られてくるので、以下のメソッドをAppDelegateに記述しておけば受け取る事ができる。

// トークンの受け取りメソッド
- (void)application:(UIApplication*)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)token
{
   NSString *deviceToken = [[[[token description] stringByReplacingOccurrencesOfString:@"<"withString:@""] 
							  stringByReplacingOccurrencesOfString:@">" withString:@""] 
							 stringByReplacingOccurrencesOfString: @" " withString: @""];
   NSLog(@"deviceToken: %@", deviceToken);
}
// 認証エラーの時
- (void)application:(UIApplication*)app didFailToRegisterForRemoteNotificationsWithError:(NSError*)err
{
	NSLog(@"Errorinregistration.Error:%@",err); 
}

Edit
デバイストークンを通知者のデータベースに登録

ここは、各アプリのサーバー処理の実装によるため、具体例を記述できないが、通常はアプリ名とデバイストークンを1レコードとしたDBを作成し、通知時に対象となるアプリのデバイストークンをAPNsに送れば良いだけである。

Edit
サーバー

サーバーで行う事は、端末からのデバイストークンの登録依頼に従って、デバイストークンの保存を行う事と、実際の通知を行う作業の2つになる。

Edit
通知処理

通知処理は非常に簡単な処理のため、すでにPHP用でのライブラリなどが存在する。

このライブラリでは、簡単な書き換えのみで通知処理を実際に行うが、デバイストークンの処理については別途記述する必要がある。

また注意点として、AppleDeveloperCenterでアプリIDにAPNsを登録するときに作成した、pemファイルをAPNsに接続する時に利用するため、pemファイルは自社の通知サーバーに登録しておく必要がある。

Edit
その他のリンク