nifty cloud mobile backendとは
誠に勝手ながら nifty cloud mobile backend
って毎回入力するのが面倒なので以降は「 mBaaS 」とします。
mBaaSとは
スマートフォンアプリのバックエンド開発が
開発不要になるクラウドサービス
引用:http://mb.cloud.nifty.com/about.htm
準備
-
XCodeプロジェクトの新規作成
-
CocoaPodsでのSDK導入
Podfile
pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
```bash
$ pod install
$ open PROJECT_NAME.xcworkspace
iOSアプリ側実装
プッシュ通知承諾アラート
ここのアラートを出すのはアプリによってマチマチだと思います。実際はどこでもいいです!
チャットアプリだったら初めてメッセージ画面に移動したときにアラートを表示させるようにしてもいいです。
# import <NCMB/NCMB.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[NCMB setApplicationKey:@"アプリケーションキー" clientKey:@"クライアントキー"];
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) {
//iOS8以上
UIUserNotificationType type = UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound;
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:type
categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:setting];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
//iOS7以下
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound)];
}
}
また、 mBaaS
のリポジトリに適当すぎるほどのプルリクを出しているのでマージされればここが1行で済むようになります。
この設定を忘れずに!!画像ではオフになっていますが、オンにしてください!!
デバイストークン取得後
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NCMBInstallation *installation = [NCMBInstallation currentInstallation];
//Device Tokenを設定
[installation setDeviceTokenFromData:deviceToken];
//端末情報をデータストアに登録
__weak typeof (self) weakSelf = self;
[installation saveInBackgroundWithBlock:^(NSError *error) {
if(error){
//端末情報の登録が失敗した場合の処理
NSLog(@"Failed: %@", error);
if (error.code == 409001) {
//失敗した原因がdeviceTokenの重複だった場合、上書き処理を行う
[weakSelf updateExistInstallation:installation];
} else {
//deviceTokenの重複以外のエラーが返ってきた場合
NSLog(@"%@", error);
}
} else {
//端末情報の登録が成功した場合の処理
NSLog(@"Success");
}
}];
}
// deviceTokenの重複で端末情報の登録に失敗した場合に上書き処理を行う
- (void)updateExistInstallation:(NCMBInstallation*)currentInstallation{
NCMBQuery *installationQuery = [NCMBInstallation query];
[installationQuery whereKey:@"deviceToken" equalTo:currentInstallation.deviceToken];
NSError *searchErr = nil;
NCMBInstallation *searchDevice = [installationQuery getFirstObject:&searchErr];
if (searchErr){
//端末情報の検索に失敗した場合の処理
NSLog(@"%@", searchErr);
} else {
//上書き保存する
currentInstallation.objectId = searchDevice.objectId;
[currentInstallation saveInBackgroundWithBlock:^(NSError *error) {
if (error){
//端末情報更新に失敗したときの処理
NSLog(@"%@", error);
} else {
//端末情報更新に成功したときの処理
NSLog(@"Rewrite Success");
}
}];
}
}
[installation setDeviceTokenFromData:deviceToken];
ここはこれをするだけでいいのは結構嬉しいです!
mBaaS
ライブラリのソースをみると <
, >
,
が弾かれるようになっていました。
とりあえずここまででiOSアプリ側のプッシュ通知を受け取るための準備は完了!
mBaaS側作業
前提としてすでに上記サイトで AppID
を取得してNotificationを設定しているとします。
作成した AppID
のものを選択する。
上記画像のようなものがでてくるので Edit
をクリック
まだCertificateを作成していない場合は、KeyChainから証明書を要求しておく
Certificate作成
ユーザのメールアドレス
はApple Developerに登録しているメールアドレス。通称はなんでもいいのかな?(間違ってたら教えて下さい!!)
適当な場所に作成・保存したら Create Certificate
をクリックして指示にしたがって *.cer
ファイルをダウンロードする
p12ファイル作成
ダウンロードした aps_development.cer
または aps.cer
を取得してKeyChainに登録
こんな感じに追加されるので場合によって p12
ファイルを副クリックから書き出してください。
サーバに適用
上記にログインをする。
大体こんな感じに手順をすすめる。
あとは プッシュ通知
タブを選んでそこら辺にある新しくプッシュ通知を作成できそうな以下みたいな画像を押下。
iOSアプリはすでにプッシュ通知承諾アラートを表示し、OKが選択されてある状態ならば、そのままプッシュ通知を作成する!
あとは待つ!!
これでプッシュ通知が来たらとりあえずは成功!!
プッシュ通知の開封をmBaaSに通知する
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[NCMBAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];
// 処理
}
プッシュ通知については以前に記事を書いたので以下リンクを参照ください。
アプリが起動されてない場合のPush通知からの起動動作について
おわりに
ざっと簡単な実装をしてみましたが、いかがだったでしょうか?
以前にPythonでプッシュ通知を実装する記事を書いたのですが、こちらも合わせてなんらかのテストができるとちょっといいかもですね!