タイトルにもある通り、スマホアプリのプッシュ通知許諾を得るためのダイアログを、任意のタイミングで表示するための実装方法を書いていきます。
プッシュ通知配信許諾までの流れ
プッシュ通知を配信の許諾を得るまでの流れは大きく分けると下記の通り。
- プッシュ通知のアクションを設定する
- プッシュ通知配信許諾ダイアログを表示してUIApplicationにプッシュ通知設定をした引数を渡す
- 登録したプッシュ通知の設定内容をAPNsサーバーに送信
- デバイストークン登録可否のレスポンスを受け取る(Reoro導入の場合SDKへデバイストークンを登録)
実装自体はすごく簡単なので、つらつらと必要なところだけ書いていきます。
実装
プッシュ通知のアクションに設定できるプロパティはいくつかありますが、今回はシンプルに alert
と badge
sound
のみを設定します。
//プッシュ通知のアクションを設定する
let settings:UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
//iOS10では非推奨。UNNotificationSettingsを使用するようにとWarningがでる。これは追い追い手が空いた時にでも調べます。
//プッシュ通知配信のダイアログを表示(UIApplicationの引数に"settings"を渡す)
UIApplication.shared.registerUserNotificationSettings(settings)
//"settings"で設定した内容をAPNsサーバーに登録する
UIApplication.shared.registerForRemoteNotifications()
デバイストークン登録可否の確認
プッシュ通知の許諾ダイアログを表示後にAPNsサーバーに送った結果、デバイストークンの登録ができたかどうかが、Delegateファイルに返ってきます。
func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) {
// プッシュ通知が利用可能であればdeviceTokenが取得できる
NSLog("Device Token: " + "\(deviceToken)")
}
func application(application: UIApplication!, didFailToRegisterForRemoteNotificationsWithError error: NSError!) {
// プッシュ通知が利用不可であればerrorが返ってくる
NSLog("error: " + "\(error)")
}
versionによるプッシュ通知の設定と取得できる値の違い
- 設定: iOS7以下ではpush通知を有効にするタイミングで設定を送信
- 設定: iOS8以降ではpush通知を有効にするタイミングとは別に設定を送信
- 値取得: iOS7~9のversionではプッシュ通知配信可否の値が取得可能
- 値取得: iOS10以降からプッシュ通知配信可否以外の設定値も取得可能
iOS9以前のversionでのプッシュ通知の配信可否の取得メソッド
func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
if notificationSettings.types == .none {
print("通知を不許可")
} else {
//.badge / .sound / .alert
print("通知を許可")
}
}
iOS10以降で取得できるプッシュ通知の設定値
- 「通知を許可」の可否
- 「通知センターに表示」の有無
- 「Appアイコンにバッジを表示」の有無
- 「ロック画面に表示」の有無
- 「通知スタイル」の種類
- サウンドの可否
- バッジの可否
- アラートの可否
以上僕が現時点で理解した内容ですが、間違っているところなどありましたらコメントいただけると嬉しいです。
ではでは。