はじめに
今回、社内用にAdhocでプッシュ通知を伴うアプリをリリースしました。
結構証明書周りや署名、ビルド方法などが難しく、「Adhocではできない」と書かれたブログ記事も多くあったため、
ここに確認すると幸せになれる項目を書きます。
結論としては、Adhocでもプッシュ通知飛ばせます。
順不同に並べるので、不安なところを参考にしていただけたら幸いです。
前提
- サーバサイドからFCMへプッシュを投げて、iOSで通知を受け取る流れ
- すでにWebのプッシュ通知は実装済みで、サーバサイド→FCMへの連携はできている状態
- xcode Version 11.2.1
- enterprise apple developer program ではなく、apple developer program に登録しています
ビルドする target の内容をチェック
- TARGETS の Signing & Capabilities タブで、Background Modes の Remote notifications にチェックがついていること
- Push Notifications が選択されていること
- TARGETS の Build Settings タブで、各種設定ファイルが本番用になっていること
プロビジョニングファイルのチェック
ipaファイルを生成
- Window > Organizer > Atchices で対象のアプリを選択し、「Distribute App」
- 「Ad Hoc」を選択、rebuild from bitcode
- 「Code Signing Identity」で、公開用の「Production」プロビジョニングファイルを選択
※Adhoc配信でもここで公開用のプロダクションを選択していること
ipaのzipを展開し、署名状況を確認
$ unzip xxxxx.ipa
$ codesign -d --entitlements :~ Payload/xxxxx.app
ここで表示される環境がdevelopmentではなく、productionになっていればOK
ビルドの種類を確認
Product > Scheme > Edit Scheme で、Runメニューの build Configuration が Release になっていればOK
SSL証明書を確認
Macのキーチェーンアクセス > 自分の証明書
本番では「Apple Push Services」という証明書をサーバ側で設定する必要があります。
private keyではなく、public keyから書き出す必要があるので注意。
xcode上の署名には、「iphone Distribution」の証明書を設定します。(Developerになっていないことを確認)
デバイストークンが正しいかどうか
// APNsへプッシュ通知の利用の登録が完了すると呼び出される関数です
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenBytes = deviceToken.map { (byte: UInt8) in String(format: "%02.2hhx", byte) }
NSLog("Device token: \(tokenBytes.joined())")
}
上記のようにトークンを取得。
これで生のデバイストークンが取れるので、このトークンを元にProductでプッシュが飛ばせるかをチェック。
私はこれを使わせていただきました。
https://github.com/noodlewerk/NWPusher
「Push Certificate」→[bundleid](sandbox|Production) を選択
Adhocなので 「Should use sandbox environment」のチェックを外し、「Push」を押下
→これで通知が飛んだらサーバー(今回はFCM)への設定に問題がありそう
GoogleService-Info.plist が正しいかチェック
- 本番でプロジェクトを分けている場合、読み込んである内容が本番環境のプロジェクトであることをチェック
FCMに設定しているAPNs証明書をチェック
- FCMの管理画面 > 設定 > クラウドメッセージング > APNs 証明書 ※APNsに認証キーを使っている場合は本番のキーになっているかを確認
- 開発環境と本番環境でCSRが同じでないこと
参考
https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja
https://www.amazon.co.jp/iPhone-Android-%E3%80%8C%E9%80%9A%E7%9F%A5%E6%A9%9F%E8%83%BD%E3%80%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%BE%B9%E5%BA%95%E3%82%AC%E3%82%A4%E3%83%89-%E7%A5%9E%E5%8E%9F-%E5%81%A5%E4%B8%80-ebook/dp/B00H539T4S
https://qiita.com/tyshgc/items/1e4ba87def4dbe94cd9d