7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOSアプリ、Adhoc配信でもプッシュ通知は飛ばせます!飛ばないときのトラブルシューティング

Posted at

はじめに

今回、社内用に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ファイルを生成

  1. Window > Organizer > Atchices で対象のアプリを選択し、「Distribute App」
  2. 「Ad Hoc」を選択、rebuild from bitcode
  3. 「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

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?