2016/10/07作成
- ニフティクラウドmobile backendの『プッシュ通知』機能とプッシュ通知を受信する際、プッシュ通知の『ペイロードデータを取得する』機能を実装したサンプルプロジェクトです
- 簡単な操作ですぐに ニフティクラウドmobile backendの機能を体験いただけます★☆
- このサンプルはiOS10に対応しています
- iOS8以上でご利用いただけます
スマートフォンアプリのバックエンド機能(プッシュ通知・データストア・会員管理・ファイルストア・SNS連携・位置情報検索・スクリプト)が開発不要、しかも基本無料(注1)で使えるクラウドサービス!
注1:詳しくはこちらをご覧ください
- macOS Sierra 10.12
- Xcode ver. 8.0
- iPhone6 ver. 10.0.1
- このサンプルアプリは、プッシュ通知を受信する必要があるため実機ビルドが必要です
※上記内容で動作確認をしています
- ニフティクラウドmobile backendのプッシュ通知は、iOSが提供している通知サービスを利用しています
- iOSの通知サービス APNs(Apple Push Notification Service)
- 上図のように、アプリ(Xcode)・サーバー(ニフティクラウドmobile backend)・通知サービス(APNs)の間でやり取りを行うため、認証が必要になります
- 認証に必要な鍵や証明書の作成は作業手順の「0.プッシュ通知機能使うための準備」で行います
【iOS】プッシュ通知の受信に必要な証明書の作り方(開発用)
- 上記のドキュメントをご覧の上、必要な証明書類の作成をお願いします
- 証明書の作成にはApple Developer Programの登録(有料)が必要です
1. ニフティクラウドmobile backendの会員登録とログイン→アプリ作成と設定
- 上記リンクから会員登録(無料)をします。登録ができたらログインをすると下図のように「アプリの新規作成」画面が出るのでアプリを作成します
- アプリ作成されると下図のような画面になります
- この2種類のAPIキー(アプリケーションキーとクライアントキー)はXcodeで作成するiOSアプリにニフティクラウドmobile backendを紐付けるために使用します
- 続けてプッシュ通知の設定を行います
- ここで⑦APNs用証明書(.p12)の設定も行います
2. GitHubからサンプルプロジェクトのダウンロード
-
下記リンクをクリックしてプロジェクトをダウンロードをMacにダウンロードします
- ダウンロードしたフォルダを開き、「SwiftPayloadApp.xcworkspace」をダブルクリックしてXcode開きます(白い方です)
- 「SwiftPayloadApp.xcodeproj」(青い方)ではないので注意してください!
AppDelegate.swift
を編集します- 先程ニフティクラウドmobile backendのダッシュボード上で確認したAPIキーを貼り付けます
- それぞれ
YOUR_NCMB_APPLICATION_KEY
とYOUR_NCMB_CLIENT_KEY
の部分を書き換えます - このとき、ダブルクォーテーション(
"
)を消さないように注意してください! - 書き換え終わったら
command + s
キーで保存をします
- 始めて実機ビルドをする場合は、Xcodeにアカウント(AppleID)の登録をします
- メニューバーの「Xcode」>「Preferences...」を選択します
- Accounts画面が開いたら、左下の「+」をクリックします。
- Apple IDとPasswordを入力して、「Add」をクリックします
- 追加されると、下図のようになります。追加した情報があっていればOKです
- 確認できたら閉じます。
- 「TARGETS」 >「General」を開きます
-
「Identity」>「Bundle Identifier」を入力します
-
「Bundle Identifier」にはAppID作成時に指定した「Bundle ID」を入力してください
-
「Signing(Debug)」>「Provisioning Profile」を設定します
-
今回使用するプロビジョニングプロファイルをプルダウンから選択します
-
プロビジョニングプロファイルはダウンロードしたものを一度__ダブルクリック__して認識させておく必要があります(プルダウンに表示されない場合はダブルクリックを実施後設定してください)
-
「TARGETS」>「Capabilities」を開き、「Push Notifications」を__ON__に設定します
-
設定は完了です
-
lightningケーブルで登録した動作確認用iPhoneをMacにつなぎます
-
Xcode画面で左上で、接続したiPhoneを選び、実行ボタン(さんかくの再生マーク)をクリックします
- インストールしたアプリを起動します
- プッシュ通知の許可を求めるアラートが出たら、必ず許可してください!
- 起動されたらこの時点でデバイストークンが取得されます
- ニフティクラウドmobile backendのダッシュボードで「データストア」>「installation」クラスを確認してみましょう!
- まずはアプリを__起動した状態__でプッシュ通知を送ってみましょう!
- ニフティクラウドmobile backendのダッシュボードで「プッシュ通知」>「+新しいプッシュ通知」をクリックします
- プッシュ通知のフォームが開かれます
- タイトル、メッセージ、JSON、URL(他も後ほど試してみてください)を入力してプッシュ通知を作成します
- 端末を確認しましょう!
- 少し待つとプッシュ通知が届きます
- アプリ起動時はプッシュ通知が__表示されません__!(iOSの仕様)ただし、プッシュ通知が受信できていないわけではなく、正しく配信されていれば、ペイロードを受信し、画面に表示します
- ペイロードデータの見方については「解説」をご覧ください
- 次にアプリを__完全に閉じた状態__でプッシュ通知を送ってみましょう!
- プッシュ通知は7.と同様にダッシュボードから作成してください
- 今度はプッシュ通知が受信されますので、プッシュ通知をタップしてアプリを起動します
- 起動時にペイロードを取得し、画面に表示します
- ペイロードデータの見方については「解説」をご覧ください
- 下記2点について解説します
- ペイロードデータについて
- サンプルプロジェクトに実装済みの内容
- ニフティクラウドmobile backendのダッシュボードで入力した内容は以下のようなJSONデータとして、端末に届きます
{
"aps" : {
"alert" : {
"body" : "message",
"title" : "title"
},
"sound" : "default"
},
"com.nifty.PushId" : "********",
"data" : "json",
"com.nifty.RichUrl" : "http://mb.cloud.nifty.com/"
}
- 「aps」の1つ下の階層に「alert」があり、この1つ下の階層にダッシュボードで入力した「メッセージ」と「タイトル」が、それぞれ「body」と「title」に設定されます
- ダッシュボードで「音声ファイル名」を設定した場合、「aps」の1つ下の階層に「sound」に設定されます
- ダッシュボードで「JSON」に入力したデータはそのまま追加されて設定されます
- ダッシュボードで「URL」に設定した場合、「com.nifty.RichUrl」として設定されます
- ニフティクラウドmobile backend のドキュメント(クイックスタート)をSwift版に書き換えたドキュメントをご用意していますので、ご活用ください
- SwiftでmBaaSを始めよう!(<CocoaPods>でuse_framewoks!を有効にした方法)
AppDelegate.swift
のdidFinishLaunchingWithOptions
メソッドにAPNsに対してデバイストークンの要求するコードを記述し、デバイストークンが取得された後に呼び出されるdidRegisterForRemoteNotificationsWithDeviceToken
メソッドを追記をします- デバイストークンの要求はiOSのバージョンによってコードが異なります
//
// AppDelegate.swift
// SwiftPayloadApp
//
import UIKit
import UserNotifications
import NCMB
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
// APIキーの設定
let applicationkey = "YOUR_NCMB_APPLICATIONKEY"
let clientkey = "YOUR_NCMB_CLIENTKEY"
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// SDKの初期化
NCMB.setApplicationKey(applicationkey, clientKey: clientkey)
// デバイストークンの要求
if #available(iOS 10.0, *){
/** iOS10以上 **/
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) {granted, error in
if error != nil {
// エラー時の処理
return
}
if granted {
// デバイストークンの要求
UIApplication.shared.registerForRemoteNotifications()
}
}
} else {
/** iOS8以上iOS10未満 **/
//通知のタイプを設定したsettingを用意
let setting = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
//通知のタイプを設定
application.registerUserNotificationSettings(setting)
//DevoceTokenを要求
UIApplication.shared.registerForRemoteNotifications()
}
return true
}
// デバイストークンが取得されたら呼び出されるメソッド
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// 端末情報を扱うNCMBInstallationのインスタンスを作成
let installation : NCMBInstallation = NCMBInstallation.current()
// デバイストークンの設定
installation.setDeviceTokenFrom(deviceToken)
// 端末情報をデータストアに登録
installation.saveInBackground {error in
if error != nil {
// 端末情報の登録に失敗した時の処理
} else {
// 端末情報の登録に成功した時の処理
}
}
}
-
プッシュ通知からペイロードを取得するコードは下記の2パターンあります
-
【ペイロード:アプリ非起動時に受信】アプリが起動されたときにプッシュ通知の情報を取得する
-
【ペイロード:アプリ起動時に受信】アプリが起動中にプッシュ通知の情報を取得する
-
それぞれ
AppDelegate.swift
の次の箇所に追記します
アプリ非起動時に受信する場合
- 次にアプリが起動されたときにペイロードを取得するため、
didFinishLaunchingWithOptions
メソッド内に記述します
// 【ペイロード:アプリ非起動時】アプリが起動されたときにプッシュ通知の情報を取得する
if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary {
//プッシュ通知情報の取得
/* 省略 */
}
アプリ起動時に受信する場合
- 起動中に受信するため、
didReceiveRemoteNotification
メソッドを追記し、記述します
// 【ペイロード:アプリ起動時】アプリが起動中にプッシュ通知の情報を取得する
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// プッシュ通知情報の取得
/* 省略 */
}
- ニフティクラウドmobile backend のドキュメント(プッシュ通知)をSwift版に書き換えたドキュメントをご用意していますので、ご活用ください
- [Swift3(iOS10)] --準備中--
- [Swift2(iOS9,8)] Swiftでプッシュ通知を送ろう!
- 同じ内容の【Objective-C】版もご用意しています
- ObjcPayloadApp_iOS10