0.はじめに
ブルブルさせたいので、
既存のアプリにプッシュ通知(APNS)を実装してみます。
1.Mac の キーチェーンアクセス から、CSR ファイルを作成する。
基本的には、以下の記事の手順に沿って、CSR ファイルを作成します。
-
プッシュ通知に必要な証明書の作り方2018 - Qiita
- 「証明書アシスタント」ダイアログ
- 証明書情報
- 通称 : 英字で記入
- 要求の処理 : 「ディスクに保存」を選択し「鍵ペア情報を設定」にチェック
- 証明書情報
- 「証明書アシスタント」ダイアログ
- ※参考 :
2.既存の App ID に「Push Notifications (Development)」を設定する。
- 以下のリンクにアクセスし、既存の App ID の情報を表示し、「Edit」ボタンを押下します。
- 「Push Notifications」にチェックを入れ、「Development SSL Certificate」の「Create Certificate」ボタンを押下します。
- 「Continue」ボタンを押下します。
- 「Choose File ...」ボタンを押下し、作成した CSR ファイルをアップロードします。
- 「Continue」ボタンを押下します。
- 「Download」ボタンを押下し、CER ファイルをダウンロードし、「Done」ボタンを押下します。
- 「Certificates」の一覧に作成された証明書が追加されます。
- 「Identifiers」の一覧を表示し、既存の App ID の情報を確認します。
3.既存の プロビジョニングファイルを更新する。
- 以下のリンクにアクセスし、既存のプロビジョニングファイルの情報を確認します。
- 以下のページを参考に、警告が表示されているプロビジョニングファイルを更新します。
4.P12 ファイルを作成する。
基本的には、以下の記事の手順に沿って、P12 ファイルを作成します。
-
プッシュ通知に必要な証明書の作り方2018 - Qiita
- パスワード :
- 手順には、「何も入力しない」とありますが、今回入力しました。
5.アプリの設定を変更する。
- 以下のページの手順に沿って、設定を変更します。
6.アプリのコードを変更する。
AppDelegate.swift
- `import` に以下を追加。
- 以下のデリゲートを、継承元に追加。
- `func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool` メソッドに以下を追加。
- 以下のメソッドを追加。
- ※参考 :
- APNsとは?設定と実装方法の完全版! | Growth Hack Journal
- Xcode8を使ってiOSでPush通知をやってみた - Qiita
- iOS 10 User Notifications Framework実装まとめ - Qiita
- iOS10でプッシュ通知を実装してみた - Goalist Developers Blog
- [iPhone] APNs プッシュ通知、デバイストークンの取得
- iOS Swift プッシュ通知を受け取ってからViewControllerに情報を渡す - ボクココ
- [iPhone] APNs プッシュ通知、デバイストークンの取得
- 【Swift】いまさらですがiOS10でプッシュ通知を実装したサンプルアプリを作ってみた - Qiita
- iOSのPUSH通知(APNS)の特徴・ノウハウまとめ(iOS 9まで対応) - Qiita
- 以下のリンクの「README.md」の「Installation」の手順から、アプリをインストールします。
- アプリを起動すると通知の確認ダイアログが表示されるので、許可し、デバッグログからデバイストークンを確認します。
- Pusher を起動し、P12 ファイルをインポートします。
- デバイストークンを入力し、「Push」ボタンを押下します。
- アプリに通知が届くことを確認します。
- 特に大きなハマりは無かったですが…。
- この後、フォアグラウンド/バックグラウンド/未起動時などのそれぞれの状態での確認、通知の文言やレイアウトの調整、通知をクリックした後の動作など、諸々の対応が必要になるかと…。
import UserNotifications
UNUserNotificationCenterDelegate
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.alert, .sound, .badge], completionHandler: { (granted, error) in
if error != nil {
return
}
if granted {
debugPrint("通知許可")
} else {
debugPrint("通知拒否")
}
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
})
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data -> String in
return String(format: "%02.2hhx", data)
}
let token = tokenParts.joined()
print("Device Token: \(token)")
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print(userInfo)
completionHandler(.noData)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(userInfo)
completionHandler(.noData)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Failed to register for remote notifications with error: \(error)")
}
7.プッシュ通知の受信を確認する。
Pusher というアプリがあるみたいで、そちらを使います。
99.ハマりポイント
XX.まとめ
また、
Amazon SNS を使っての通知など、確認しようかと考えています。
ご参考になれば♪