Firebaseを使ってiOS端末にPush通知を送信する(基本編)
Firebaseを使って管理画面からPush通知を送り、iOS端末で受け取るまでを理解しやすいように最低限のコードの部分のみで検証してみたいと思います。
検証環境
- XCode 7.3.1
- iOS 8.1以上
- Swift 2.2.1
手順
1.Firebaseに登録してプロジェクトを作成
まずはFirebaseに登録して以下のコンソールにログインし、プロジェクトを作成します。
https://console.firebase.google.com/
2.設定ファイルを作る
- コンソールにある「iOS アプリに Firebase を追加」というリンクからplistを作成します。
- 作成した「GoogleService-Info.plist」をプロジェクトに追加します。
※ BundleIDの入力が求められますが、Push通知を使える必要があるので当然ながらIDはワイルドカードでないExplicit App IDである必要があります。
3.CocoaPodsでライブラリをインストール
pod init
を実行してPodfileを作成し、PodfileにPush通知に必要なライブラリを記述します。
# Uncomment this line to define a global platform for your project # platform :ios, '9.0' target 'FirebaseNotificationSample' do # Comment this line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for FirebaseNotificationSample pod 'Firebase/Core' pod 'Firebase/Messaging' end
追加したのはFIrebase/Core
と、Firebase/Messafing
の2つです。
Podfileを編集したら、pod install
でインストールします。
4.Push通知を受け取るためのコードをAppDelegateに記述
Firebaseの設定読み込みと、トークンをFirebaseに送信してPush通知を受け取れるようにします。
Firebaseの設定読み込みは以下の1行を追加するとGoogleService-Info.plist
をみて設定してくれるので非常に簡単です。
FIRApp.configure()
ライブラリを読み込むためのimport Firebase
も忘れずに追加します。
以下のコードはトークンを取得して送信し、Pusuを受け取れるようにするための最低限のコードです。
didFinishLaunchingWithOptionsでアプリ起動時にPush通知のパーミッションをとり、didRegisterForRemoteNotificationsWithDeviceToken
でトークンをFirebaseに送信します。
import UIKit import Firebase @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications() return true } func applicationWillResignActive(application: UIApplication) { } func applicationDidEnterBackground(application: UIApplication) { } func applicationWillEnterForeground(application: UIApplication) { } func applicationDidBecomeActive(application: UIApplication) { } func applicationWillTerminate(application: UIApplication) { } }
これでとりあえずPush通知を送れるようになります。
5.Push通知用証明書を登録
Pusu通知を送るためにはPush通知用証明書が必要なので、FirebaseコンソールからPush通知の証明書を登録します。
https://developer.apple.com/
でPush通知用証明書を作成し、p12を出力します。- Firebase管理画面のプロジェクトの設定画面を開きます。
- クラウドメッセージングタブから証明書(p12)をアップロードします。
6.Firebase管理画面からPush通知を送信
Push通知を送信する方法として、管理画面から送信する方法とHTTP APIから送信する方法がありますが、確認のため手軽な管理画面からの送信で試してみます。
定期送信する場合などはHTTP APIを使うことに鳴ると思います。
- Firebase管理画面の左メニューから「Notification」を選択します。
- 「最初のメッセージを送信」をクリックします。
- メッセージ文を入力します。
- ターゲットから該当のアプリを選択します。
これでアプリ全体に対してPusu通知を送ることができます。
Push通知が届かない場合
Pusu通知が飛ばない原因としていろいろ考えられますが、以下のポイントを確認して見ると良いです。
- プロジェクトのCapabilitiesでPush NotificationsがONになっていない
- Push通知用のP12がアップされていない。
20160819追記
デフォルトではMethod swizzingを使ってAPNsの設定を行うようになっているので、didRegisterForRemoteNotificationsWithDeviceToken
の実装は不要です。
自前で実装する場合はInfo.plistに以下の設定を追加します
FirebaseAppDelegateProxyEnabled=NO
//APNsの設定部分の実装 func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) }
TAG
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境