APNsを利用したプッシュ通知の実装手順

実装については、以下の公式ページの手順に沿っていけば出来る。
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja
本ページでは開発環境の構築で詰まったところや備忘録を記載する。

# 実装の動作確認をした環境
Xcode: 10.3（iOS12.4対応）
Swift: 5.0

# 実装前の準備
1. Apple Developer Programに登録する
  - Cloud Messagingを利用するために登録が必要。
  - 登録ページは以下。<br>
  https://developer.apple.com/jp/programs/enroll/
  - 入力後、登録完了のメールはすぐに届くが、実際にサービスを使えるようになるまで
  半日〜１日ほどかかる。サービスが使えるようになるとメールが改めて届く。

2. XCodeでアプリのプロジェクトを作成する
  - Xcodeを起動する
  - 「Create a new Xcode project」を選択する
  - 「Single View App」を選択して、「Next」ボタンを押下
  - 「Product Name」にプロジェクト名を入力する。例）TestApns
  - あとはデフォルト設定のまま進み、最後に「Create」ボタンを押下

3. CocoaPodsのインストール（FirebaseSDKをインストールするために必要なツール）
  - $ sudo gem install -n /usr/local/bin cocoapods
  - $ pod setup
  - 次のエラーが出る。<br>
    /Library/Ruby/Gems/2.3.0/gems/cocoapods-1.7.5/lib/cocoapods/command.rb:118:in `git_version': Failed to extract git version from `git --version` ("xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun\n") (RuntimeError)
  - 次のページの解決策にあるので実施する。<br>
  https://blog.kuromusubi.com/develop/environment/xcode/20180222-verify_minimum_git_version

4. アプリで使用したいポッド（ライブラリ）を Podfile に追加する
  - $ cd your-project
  - $ pod init
  - $ vi Podfile
  - 以下を追加。<br>
  pod 'Firebase/Core'<br>
  pod 'Firebase/Messaging'
  - $ pod install
  - $ open your-project.xcworkspace<br>
  XCodeが開くのでPods > PodsにFirebaseの各ライブラリがインストールされていることを確認する。

5. Firebase consoleでFirebaseプロジェクトの登録と、アプリの登録を行う
  - https://console.firebase.google.com/

6. GoogleService-Info.plistをアプリのプロジェクトに追加する
  - Firebase consoleで登録したFirebaseプロジェクトを選択して、歯車アイコンを選択する。「プロジェクトの設定」を選択、「全般」タブで登録したアプリのところに「GoogleService-Info.plist」のダウンロードアイコンがあるので、クリックしてダウンロードする。
  - $ open your-project.xcworkspaceでワークスペースを開いて、プロジェクトのルートにドロップする
  - 「Copy items if needed」にチェックを入れて
  - 「Added foldersはCreate groups」を選択する
  - 「Finish」ボタンを選択する

7. APNs認証キーをApple Developer Programで作成する
  - https://developer.apple.com/account/resources/authkeys/list
  - 「Keys」の右の「＋」ボタンを押下する
  - 「Key Name」に任意の値を入力する
  - 「Apple Push Notifications service (APNs)」にチェックを入れて、「Continue」ボタンを押下
  - 「Register」ボタンを押下
  - 「Download」ボタンを押下。「AuthKey_〜〜〜.p8」というAPNs認証キーファイルがダウンロードされる

8. APNs認証キーファイルをFirebase consoleにアップロードする
  - Firebase consoleでFirebaseプロジェクトを選択して、歯車アイコンを選択、「プロジェクトの設定」を選択する
  - 「Cloud Messaging」タブを選択する
  - 「iOSアプリの設定」から「APNs 認証キー」の「アップロード」リンクを押下する
  - APNs 認証キーの指定と、キーIDとチームIDの入力を求められる<br>
  APNs 認証キーは先ほどダウンロードしたファイルをした「AuthKey_〜〜〜.p8」ファイルを指定する<br>
  キーIDは「AuthKey_〜〜〜.p8」ファイル名の「〜〜〜」の部分<br>
  チームIDはApple Developer Programの「Certificates, Identifiers & Profiles」の右上のログインユーザ名をクリック、「View Membership」を選択。「Membership Details」「Team ID」に記載がある
  - 以上を設定したら「アップロード」ボタンを押下する

9. アプリでプッシュ通知を有効にする
  - Xcodeでアプリのワークスペースを開き、プロジェクトの設定、[Capabilities] で「Push Notifications」を「ON」にする<br>
  ※Apple Developer Program membersでないとPush Notificationsが選択できない

# 実装
  - 以下、公式ページのAppDelegate.swiftを反映するのみ<br>
  https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja
  - アプリをインストールして実行する
  - 「"your-project"は通知を送信します。よろしいですか？」とダイアログが出るので「許可」を選択する
  - ログにFCMトークンが出力されるのでメモをとる<br>
  例）Firebase registration token: dt6ZjI4WAc0:APA91bEBAZ9SEl3qInP0gtPZAfHXPfQ4HULnb9AplXmsp8tQ6ebUth1izQfnv0AXbpMyivRKP812La1ykdlNVlRUwH769ZLeRFCPrxEmWPrNJq-nFZK0Uo7jRDqrNYb4oMnRGmkV44Au

# メッセージの受信確認
  - メッセージを受信する実機では、アプリを落としてホーム画面を表示している状態にする
  - Firebase consoleでFirebaseプロジェクトを選択
  - サイドメニューの「Cloud Messaging」を選択
  - 「新しい通知」ボタンを押下
  - 「通知のタイトル」と「通知テキスト」を入力して、「テスト メッセージを送信」ボタンを押下
  - 「FCM 登録トークンを追加」となっているところに先ほどアプリで表示したログを入力する
  - 「＋」ボタンを押下してFCMトークンを登録する
  - 「テスト」ボタンを押下<br>
  実機の画面に通知がされる

※ソースコードのURL
https://github.com/opst-ito-daisuke/TestApns