そろそろちゃんとまとめよう。
appCCloudを使ってPUSH通知を実装する方法。
appCCloudじゃなくても共通で必要な手順もある。
◯証明書を揃える
PUSH通知用の証明書を作る(開発用、本番用両方)
1. Apple Developerに行き、Certificatesを新規作成
2. 証明書の種類を「Apple Push Notification service SSL」を選択。
開発用の場合は Sandbox , 本番用の場合は Productionにする
3. そのままContinueを押す
この画面には、証明書要求(Certificate Signing Request)の作り方が書いてある。それを作るのは次の手順で。
4. 証明書要求を作る。
Macの「キーチェーン」アプリを起動する。
上部メニューから、キーチェーンアクセス→証明書アシスタント→認証局に証明書を要求 を選択
次の画面で「ディスクに保存」を選択し、「続ける」を押す。(メールアドレスや通称は何でも良い)
すると、
CertificateSigningRequest.certSigningRequest
という名前のファイルが生成される。(次の手順で使ったらもう必要ないので、適当なところに置いておけばよい)
5. 証明書要求を送信する
Apple Developerに戻る。
この画面で、 Choose File から先ほど作ったばかりの CertificateSigningRequest を選択する。
選択したらGenerateをクリック。
6. すると、すぐに証明書が作成されるので、ダウンロードしてどこか分かりやすいところに保存しておく。
開発用なら aps_development.cer, 本番用なら aps_production.cer という名前になっている。
7. キーチェーンに登録
今ダウンロードした aps_development, aps_production.cer をダブルクリックする。
すると自動的にキーチェーンに登録される。
開発用なら「Apple Development IOS Push Service: (バンドル名)」
本番用なら「Apple Production IOS Push Service: (バンドル名)」
という名前で登録されているはず。
8. 秘密鍵を書き出す
この証明書から、秘密鍵情報を書き出す。
キーチェーンの証明書の三角をクリックすると、下に秘密鍵情報の行が表示される。
ここを右クリックして、「◯◯◯を書き出す」を選択。
分かりやすいファイル名をつけ、ファイル形式を「p12」にして書き出す。
これがPUSH通知用の秘密鍵になる。
PUSH通知サービスを使う場合、この秘密鍵の登録が必ず必要になる。
9. pemファイルに変換する
秘密鍵は作れたのでいいのだが、appCCloudを使う場合、ファイル形式をpemにする必要があるので変換する。
ターミナルを開き、以下のコマンドを実行する。
$ openssl pkcs12 -in XXX.p12 -out XXX.pem -nodes -clcerts
これで出力されたXXX.pemを使用することになる。
◯appCCloud管理画面
1.アプリ情報の登録
アプリの登録を行う。
画面はしょっちゅう変わるので、スクリーンショットは割愛。見れば分かる。
バンドルIDその他を登録。正確に。当たり前だがバンドルIDが合っていないとPUSH通知は届かない。
最下部にPUSH通知用の設定箇所がある。ここに先ほど作ったpemファイルを登録する。
また、アプリ情報を登録すると、メディアキーが作成される。これが必要になるのでコピーしておく。
2. 最新SDKダウンロード
当然のことだが、SDKを最新にしておくことは重要。
ダウンロードしておく。
ちなみにcocos2d-x用や、Unity用のSDKもあるので、そちらを使うこと。
3. PUSH通知情報登録
PUSH通知設定画面から、PUSH通知の文面、配信日時、開発用か本番用かなどを登録する。
配信は5分間隔で行われる。(即時でないのが惜しい)
ただしまだ実装の方が済んでないので、そちらが終わってからにしよう。
◯実装
1. 先ほどダウンロードしたSDKを解凍
2.プロジェクトに追加
中に入っているREADME.mdファイルを読めば書いてあるのだが、
AppCCloudPlugin.h
AppCCloudPlugin.cpp
AppCCloudPlugin.mm
libappCCloud.a
includeディレクトリ
をプロジェクトに追加する。
3. ライブラリ追加
CoreTelephony.framework
StoreKit.framework
確かこれらが必要だった気がする
4. ARC対応
前の手順で追加した AppCCloudPlugin.mm が
実はARC非対応で書かれているので、もしプロジェクト全体をARCで作っている場合は対応が必要。そうでないなら(コンパイルが通っていれば)この手順は飛ばしてよい。
プロジェクトビューからプロジェクトを選択→TARGETSからiOSのものを選択→ Build Phases を選択→AppCCloudPlugin.mmをダブルクリック→ -fno-objc-arc を追加
これで、AppCCloudPlugin.mmは非ARCとしてコンパイルされるようになる。
5. コーディング
AppController.mに必要なコードを追記する。
以下はサンプルから抜粋したもの。
APPCCLOUD_MEDIA_KEYには、appCCloudの管理画面で手に入れたメディアキーを入れておくこと。
#define APPCCLOUD_MEDIA_KEY @""
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// プッシュ通知経由の起動数を取得する場合は、引数にlaunchOptionsをセットしてください
[appCCloud setupAppCWithMediaKey:APPCCLOUD_MEDIA_KEY
option:APPC_CLOUD_AD | APPC_CLOUD_PUSH
launchOptions:launchOptions];
return YES;
}
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) devToken
{
NSLog(@"success token:%@", devToken);
[appCCloud pushNotificationDidRegisterWithDeviceToken:devToken];
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *) err
{
NSLog(@"failure %@", err);
[appCCloud pushNotificationDidFailWithError:err];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
[appCCloud pushNotificationDidReceive:userInfo appStat:application.applicationState];
}
6. 実機で起動する
実機で起動する。シミュレータではできない。
うまく行けば、「(アプリ名)はPUSH通知を使用します。よろしいですか?」というアラートビューが出る。
ここまでできれば、再度appCCloud管理画面に戻り、PUSH通知設定を行う。
5分待って通知がくれば成功!
◯本番については
本番用については、本番用のアプリを起動した端末があればいい。
PUSH通知設定で本番向けに設定すれば、PUSH通知は飛んでくる。AppStoreに置かれるのを待つことは無い。
appCCloudに登録した証明書の間違いが無いかの確認のため、AppStoreに置かれる前に一度確認しておこう。(もし間違っていても、別にappleへ再サブミットするとかではないので、慌てることは無い。「◯証明書を揃える」の手順を見直せばいいだけだ)
PR