Framework を使用します。, Apple Push Notification service (APNs) は、Appleが提供するプッシュ通知を実現するサービスです。, 受信側と送信側の通知の設定が完了したら、プロバイダーからAPNsに送信のリクエストを投げると対象のデバイスに通知が届くというわけです。, もし通知を受け取った時にアプリが起動されていなくても、通知自体は表示されます。さらにデバイス自体が起動していない場合は、APNsがしばらく待機したのちに再度通知を送信してくれるようです。, Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に配信するためのクロスプラットフォーム メッセージング ソリューションです。, iOSだとAPNsがあるようにAndroid, Webとそれぞれに対応したプロバイダーをこちらが実装するのは手間でしょう。, こちらの公式ドキュメント 通りに実装するだけです。 Firebase Cloud Messanging (FCM)って何? 公式ページによると、 Firebase Cloud Messaging(FCM)は、メッセージを無料で確実に配信するためのクロスプラットフォーム メッセージング ソリューションです。 とあります。 iOS… その他のすべての Firebase プロダクトで、物理 iOS デバイスと iOS シミュレータのいずれかを使用できます。, Xcode プロジェクトをまだ用意していない場合、Firebase プロダクトを試すだけであれば、クイックスタート サンプルをダウンロードしてご利用いただけます。, iOS アプリに Firebase を追加する前に、iOS アプリに接続するための Firebase プロジェクトを作成します。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。, Firebase コンソールで [プロジェクトを追加] をクリックし、[プロジェクト名] を選択するか、新しいプロジェクト名を入力します。, 既存の Google Cloud Platform(GCP)プロジェクトがある場合は、[プロジェクト名] プルダウン メニューからプロジェクトを選択できます。既存のプロジェクトがない場合は、新しいプロジェクト名を入力してください。, Firebase プロジェクトには一意の ID が自動的に割り当てられます。Firebase がプロジェクト ID を使用する仕組みについては、Firebase プロジェクトについて理解するをご覧ください。, Firebase コンソールで残りの設定手順を実施した後、[プロジェクトを作成](既存の Google プロジェクトを使用する場合は [Firebase を追加])をクリックします。, Firebase プロジェクトのリソースが自動的にプロビジョニングされます。処理が完了すると、Firebase コンソールに Firebase プロジェクトの概要ページが表示されます。, Firebase プロジェクトを作成したら、プロジェクトに iOS アプリを追加できます。, Firebase プロジェクトにアプリを追加するベスト プラクティス、考慮事項(複数のビルド バリエーションの扱い方など)の詳細については、Firebase プロジェクトについて理解するをご覧ください。, Firebase コンソールの [Project Overview] ページの中央にある iOS アイコンをクリックして設定ワークフローを起動します。, すでに Firebase プロジェクトにアプリまたはゲームを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。, アプリのニックネーム: 内部用の簡易的な ID であり、Firebase コンソールでのみ表示されます。, App Store ID: Firebase Dynamic Links ではユーザーを App Store ページにリダイレクトするために使用され、Firebase 向け Google アナリティクスではコンバージョン イベントを Google 広告にインポートするために使用されます。まだアプリに App Store ID が割り当てられてない場合は、後でプロジェクト設定で ID を追加できます。, [Download GoogleService-Info.plist] をクリックして、Firebase iOS 構成ファイル(GoogleService-Info.plist)を取得します。, 構成ファイルを Xcode プロジェクトのルートに移動します。メッセージが表示されたら、構成ファイルをすべてのターゲットに追加するオプションを選択します。, プロジェクトに複数のバンドル ID がある場合は、Firebase コンソールで各バンドル ID を登録済みアプリに関連付けて、各アプリで独自の GoogleService-Info.plist ファイルを設定できるようにする必要があります。, Firebase ライブラリのインストールには CocoaPods を使用することをおすすめします。ただし、CocoaPods を使用せずに、SDK フレームワークを直接統合する方法もあります。, いずれかのクイックスタート サンプルを使用する場合、Xcode プロジェクトと(ポッドが含まれる)Podfile がすでに存在していても、Firebase 構成ファイルを追加してポッドをインストールする必要があります。, サポートされている Firebase プロダクトを iOS アプリに追加できます。Firebase 向け Google アナリティクスを使用して始めることを推奨します。, アプリで使用したいポッドを Podfile に追加します。たとえば、アナリティクスの場合は次のようになります。, これにより、iOS アプリで Firebase を稼働させるために必要なライブラリが、Firebase 向け Google アナリティクスとともに追加されます。, ポッドをインストールし、.xcworkspace ファイルを開いて Xcode でプロジェクトを確認します。, 最後に、アプリケーションに初期化コードを追加します。この手順は、アプリに Firebase を追加するときにすでに完了している可能性があります。クイックスタートのサンプル プロジェクトを使用した場合は自動で完了しています。, 初期化コードを追加したらアプリを実行して、Firebase を正常にインストールしたという確認を Firebase コンソールに送信します。, CocoaPods を使用しない場合でも、次の手順でフレームワークを直接インポートすることで Firebase SDK を利用できます。, framework SDK zip をダウンロードします。これは 1 GB 以下のファイルで、しばらく時間がかかる場合があります。, ターゲットのビルド設定で、Other Linker Settings に ObjC リンカーフラグを追加します。, Firebase プロジェクトとプロジェクトに関するベスト プラクティスについては、Firebase プロジェクトについて理解するをご覧ください。, Cloud Firestore または Realtime Database にユーザー情報などのデータを保存する。, Cloud Functions を使用した安全な環境でバックエンド コードをトリガーする。. Android プロジェクトに Amplify を導入する 6. Firebase 構成ファイルには、プロジェクト用の機密ではない一意の識別子が含まれています。. プッシュ証明書の作成 15. iOS アプリにプッシュ通知の送信 16. Firebase を使用してiOSのプッシュ通知を実装する; Xcodeのショートカットコマンドをまとめた (やりたいことから逆引き) iOSでプッシュ通知を実装する(PHP,Swift3) 『インストールの最終処理の実行中』でフリーズ(BootCamp×Windows7) 10月 (14) 9月 (11) ※Firebaseのセッション動画などはこちらにまとめました! firebase情報まとめ . iOS: Identifier/Profile 作成 を参照. 2. Firebase は、 iOS/Android アプリや Web アプリケーションの開発に活用できるプラットフォームです。 mBaaS (エムバース)の一つであり、 2011 年に Firebase 社がサービスを開始しました。 2014 年には、 Google 社に買収されたことで、知名度が上がりました。 にてユーザーが通知の許可をしていることが確認できたら ( granted == true であれば) 以下のメソッドを呼び出してAPNsに登録しましょう。, 今回は Firebase Cloud Messagingでの実装 のため、以下のメソッドを代わりに実装します。, このメソッドはFIRMessagingのデリゲートメソッドであるため、 FirebaseApp.configure() の後に以下のデリゲートを設定してあげましょう。, もしアプリを起動中にデバイストークンが変更されたら、 このメソッドが再び呼び出されます。, よって、このメソッド内で受け取ったデバイストークンは都度サーバーへ送り、常に最新のデバイストークンをサーバーがAPNs対して指定できるようにします。, (この際に、サーバー側で古いデバイストークンを正しく更新するために、デバイスを識別するidをテーブルの定義に載せておくと良さそうです。), UNUserNotificationCenterDelegate の以下のメソッドが呼び出されます。, フォアグラウンドでも通知を受け取るためには、引数である completionHandler に 適切なオプション を渡して通知の表示方法を指定しましょう。, 同じく UNUserNotificationCenterDelegate のメソッドである以下のメソッドが呼び出されます。, こちらのメソッドで受け取った response からペイロードをparseして適切なシーンの表示や処理を実行してあげます。, サイレントプッシュは、アプリをバックグラウンドの状態で何か処理を実行させたい場合に使用します。, iOSアプリ側でサーバーに対してポーリングする必要がないという点ではかなり効果的ですね。, 使用するためにはまずは Capabilities から Background Modes の Remote notifications をオンにしてあげる必要があります。, 基本的には、1, 2, 3のタイミングでの通知は UserNotifications Framework のメソッドでハンドリングし、 4. // Override point for customization after application launch. ポッドをインストールし、.xcworkspace ファイルを開いて Xcode でプロジェクトを確認します。, Firebase 初期化コードをアプリケーションに追加する必要があります。Firebase モジュールをインポートして、次に示すように共有インスタンスを構成します。, APNs 認証キーを Firebase にアップロードします。 Firebase iOS SDK: v5.20.0; Firebase js-sdk: admin, cloud-function, cloud-firestore; サンプルを動かすには . Why not register and get more from Qiita? これは? Firebase Cloud Messaging を使用してプッシュ通知を実装することがあったので、それについてまとめたもの。. CocoaPodsが推奨されているので、そちらの方法について書いていきます。, 2. Firebase について. Virtual Device の作成, 10. # Uncomment this line to define a global platform for your project, curl --header "Authorization: key=[サーバキー]" --header "Content-Type:application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\": \"[モバイルインスタンスID]\",\"priority\":\"high\",\"notification\": {\"title\": \"title\", \"body\": \"body\"}}", http://trueman-developer.blogspot.com/2016/11/iosphpswift3.html, https://firebase.google.com/docs/cloud-messaging/ios/certs, http://trueman-developer.blogspot.com/2016/10/cocoapodsios.html, https://dl.google.com/firebase/sdk/ios/3_2_0/Firebase.zip, https://firebase.google.com/docs/cloud-messaging/server, Windows7クリーンインストール後にWindows Update が終わらない, 『インストールの最終処理の実行中』でフリーズ(BootCamp×Windows7), サーバサイドプログラムからPush通知が実行できるらしく大体の要望には答えられる模様. Improve article. IAM ユーザーを作成する 4. For details, see the Google Developers Site Policies. Xcode で [App] > [Capabilities] でプッシュ通知を有効にする; その他のすべての Firebase プロダクトで、物理 iOS デバイスと iOS シミュレータのいずれかを使用できます。 Google アカウントを使用して Firebase にログインします。 Firebase を使用してiOSのプッシュ通知を実装する ... 2016-12-12 : 通知取得時の通知内容(titlteやbodyなど)を取得する方法が見当たらなかったので追記 2016-12-22 : FirebaseへのAPNs証明書がハマりそうだったので追記 2017-01-18 : 通知が届かないケースがあったため追記. 今回は「Firebase Authenticationを使って会員機能を作ってみる」というテーマで Firebaseを絡めた会員機能をもったiOSアプリを作る前提の実装ベースで書いていきます まとめ, 本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。, 毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。, ここから開発の手順に入っていきます。まずは、Amplify CLI をインストールします。バージョン差異を無くすため、今回は version 4.29.1 を使用します。 任意のディレクトリで下記のコマンドを実行します。, 次に、プロジェクトに Amplify を導入します。Amplify CLI が AWS のバックエンドを構築できるようにするために IAM ユーザーの作成と認証情報の設定を行います。, コマンドを実行すると AWS コンソールのログイン画面に飛ぶのでログインします。すでにログイン済みの場合はマネージメントコンソールが開きます。, ログインしたらターミナルに戻り、Enter キーを押すと使用するリージョンや IAM ユーザー名を訊かれます。今回はリージョンは us-east-1 を選択します。他は全てデフォルトを指定します。 ※ Amplify CLI 4.29.1 では ap-northeast-1 (Tokyo Region) を選択していても、analytics, notifications カテゴリを追加した際に us-west-2 に Pinpoint のプロジェクトが追加されるのでご注意ください。, https://console.aws.amazon.com/iam/~~ から始まるページが開かれます。 この時、すでに AWS のクレデンシャルをお持ちの方は、マネジメントコンソールで IAM ユーザーを作成する手順をスキップしてください。ターミナルで Enter キーを押下し、既にお持ちのクレデンシャルを入力してください。, 画面に沿って IAM ユーザーを作成します。特に選択肢や設定を変更する必要はなく、次に進めていきます。, ユーザー作成完了後、アクセスキー ID とシークレットアクセスキーが発行されるので、これをメモします。シークレットアクセスキーは一度画面を閉じると、二度と確認できなくなってしまうので、忘れずにメモしてください。, ターミナルに戻り、Enter キーを押します。アクセスキー ID、シークレットアクセスキー を訊かれるので、ブラウザの IAM ユーザー作成完了画面に表示されているものをコピーしてください。, Profile Name はデフォルト (default) のままでも OK です。もし、既に Profile の設定を持っている場合は、「pinpointapp」のようなわかりやすい名前をつけてください。, コンソール上に「Successfully set up the new user.」と表示されることを確認してください。これで、作成した IAM ユーザーの権限で Amplify CLI からコマンドを発行できるようになりました。, 次に Android プロジェクトを作成します。Android Studio を開き Start a new Android Studio project を選択します。, 最後にプロジェクトに任意の名前をつけて、今回はそれぞれ下記を指定して、Finish で完了します。, 作成した Android プロジェクトのトップディレクトリに移動して amplify init コマンドを実行します。, 途中でいくつか質問をされます。基本的にはデフォルトの設定で OK です。「Enter a name for the environment」には任意の環境名 (dev や test など) を入力してください。, Amplify は、各 AWS サービスをそれぞれ個別に設定するのでなく、amplify init コマンドによって生成された src/aws-exports.js で設定を集中的、自動的に管理することをサポートしています。このファイルには、アプリケーションで利用する全てのリージョン情報やサービスのエンドポイント情報が含まれますが、amplify add コマンド等によって追加・更新された情報は amplify push コマンド実行時に自動的に反映されるため、開発者はファイルの中身を強く意識する必要はありません。, しばらくすると、init 処理が完了します。src/aws-exportsjs が存在することと、amplify status コマンドを発行し、以下のような表示になることを確認してください。, Android デバイスにプッシュ通知を送るために利用する FCM の API キーを取得します。, firebase にアクセスして、ログインします。 「プロジェクトを追加」を選択して、名前を入力し、Google Anlytics アカウントを選択してプロジェクトを作成します。, プロジェクトが作成できたら、左側のメニューから 歯車 > プロジェクトを設定 を選択します。, 次に Android パッケージ名を入力します。 Android パッケージ名は app/src/main/AndroidManifest.xml から確認できます。, google-services.json をダウンロードして、app 配下に移動します。, 最後に、上のタブの Cloud Messaging を選択して表示されるページのサーバーキーをメモしておいてください。, Select an Analytics provider で Amazon Pinpoint を選択して、それ以外はデフォルトを選択していきます。, Analytics カテゴリを追加したら amplify status で状況を確認すると、Auth と Analytics が反映されていないことがわかります。, この Auth カテゴリは Analytics カテゴリによって作成されたもので、 Pinpoint をアプリから呼び出す際に認証を行うために作られたものです。, AWS のサービスを利用するには IAM 認証を行う必要があるのですが、Web アプリやモバイルアプリの実装にクレデンシャルを埋め込むとアプリからクレデンシャルを簡単に取得できてしまうため、Amazon Cognito の Cognito Identity Pool の UnAuth Role の一時クレデンシャルを取得するために利用されます。, amplify push でまだバックエンドに反映されていない項目を反映します。選択肢はデフォルトで大丈夫です。, ※ここで amplify push をしておかないと、Analytics と 次に追加する Notifications の Pinpoint のプロジェクトが異なってしまうのでご注意ください。, 次に、Notifications カテゴリを追加します。 Choose the push notification channel to enable では FCM を選択して、ApiKey には先ほどメモしたサーバーキーを入力します。, もう一度 amplify push で更新した項目をバックエンドに反映します。選択肢はデフォルトで大丈夫です。, amplify notification console コマンドを実行するとマネージメントコンソールを開いてくれます。, マネージメントコンソールから Push Notification の項目を確認すると、FCM が Enabled になっていることが確認できます。, 執筆時点 (2020/09/15) では、Amplify Android は Notifications カテゴリに対応していないため、今回は Mobile SDK を利用していきます。, なお、Mobile SDK と Amplify Libraries の違いは、Mobile SDK はサービスベース、Amplify Libraries はユースケース (カテゴリ) ベースで利用できるという違いがあります。また、Amplify Libraries には Amplify DataStore というローカルデータストア機能があり、開発者はデータへの読み書きを Amplify DataStore を通して行うことで、Amplify DataStore が透過的に AWS AppSync API と同期するため、オンライン、オフラインを意識することなくデータへの読み書きを実装することができます。, まずは、プロジェクトのトップディレクトリの build.gradle に buildscript.dependencies の下記を追加します。, app/build.gradle に dependencies と plugin に下記を追加します。, app/src/main/AndroidManifest.xml の application の中に下記を追加します。, PushListenerService.kt を実装します。 MainActivity のあるパッケージで Kotlin File/Class を作成します。, それでは実際にプッシュ通知を端末に送ってみます。今回は Virtual Device を使いたいと思います。, API Version を選択します。特に指定はないので、ダウンロードできているバージョンを選択してください。, Virtual Device を作成できたので、アプリを実行してみます。 先ほど作成した Virtual Device を選択して、アプリを実行します。, こちらの様にアプリが開いたら成功です。 なお、今回の実装ではアプリがフォアグラウンドにいる時には通知を表示しない実装になっているので、ホームボタンを押してアプリをバックグラウンドに移動しておきます。, では、 Pinpoint からプッシュ通知を送ってみたいと思います。 下記のコマンドでマネージドコンソールを開きます。, Pinpoint では、ユーザーへの通知は「キャンペーン」という単位で管理します。 キャンペーンではいつ、誰に、どんなメッセージを送るかを設定して、キャンペーンの単位で効果を確認することができます。, 早速キャンペーンを作っていきたいと思います。Campaigns の画面に移動して、 Create a campaign を選択します。, Pinpoint では、通知の A/B テストを行うこともできますが、今回は通常の Standard Campaign を選択します。, 通知の対象はプッシュ通知なので、 Channel は Push Notifications を選択します。, 次に、誰に送るかを設定していきます。 今回は、プッシュ通知が送れる全デバイスを対象としたセグメントを作成します。, Create a Segment を選択して、Name を All Push Segments とします。 Add a filter から、Filter by channel を選択して、Choose a channel から PUSH を選択します。, セグメントを設定していくと右側の Segment estimate の項目が変化します。 現状だと、Android デバイス1台を登録しているので、1 endpoints と表示されるはずです。対象デバイスが 1 件以上あることを確認したら、次に行きます。, 次に、どんなメッセージを送るか を設定していきます。 Create a new push notification を選択して Title と Body に任意のメッセージを入力します。, 最後に、いつ送るかを設定していきます。 今回はすぐに確認したいので、Immediately を選択します。, ここまでで通知の設定は完了です。最後に確認画面がでるので、内容が問題ないことを確認して Launch Campaign を選択します。 成功すると、Virtual Device に次の様に通知が届きます。, ※ iOS アプリの作成には下記の環境が必要です。下記の環境がない場合は 後片付け までスキップしてください。, 任意の Priduct Name を設定して、Apple Developer Program の Team を選択してください。 今回は、Langauge は Swift , User Interface は SwiftUI を使っていきます。, プロジェクトを作成できたら、アプリの Target を選択していきます。 今回は User Interface に SwiftUI を選択したため、iOS 13.0 を Target にします。, 続いて、証明書の設定を行なっていきます。 プロジェクトを選択して、Signing & Capabilities を選択してください。, 次に iPhone を Mac に接続します。 Automatically manage signing が有効になっていること、Provisioning Profile にエラーがないことを確認して、+ Capability を選択します。, + Capability から、Push Notification と Background Modes を選択してください。, 最後に、 Background Modes の Remote Notificatios を選択して完了です。, Amplify のバックエンドはすでに Android アプリの方で作成しているので、その設定を取り込んでいきます。, Amplify には amplify pull という機能があり、複数のクライアントアプリから同一のバックエンドを使いたい時に、 すでに作成済みのバックエンドの情報を取ってくることができます。, Which app are you working on?