Firebaseのcloudmessagingserviceの機能として
PUSH通知がありますが、主に3つの単位で送ることができます。
1.該当アプリがインストールされた端末全て
2.アプリ起動時発行したアクセストークンをキーに特定の端末へ
3.Firebase上で作成したトピック単位
このトピックというのがいまいちピンを来ませんので解説を行います。
トピックは、任意のグループのことです。男性、女性というグループを作ってその下に
端末を所属させることができるといったイメージでよいかと思います。
ポイントは、任意のトピックの作成方法、FireBase上でないと作成できないのか。
トピックへ端末を参加させる方法、特定のトピックに所属している端末へ
PUSH通知する方法。あたりでしょうか。
手法としましては、
例えば、無料メンバーだけに対して、PUSH通知を送りたい場合、
1)サーバーにDBがある場合、
DBに以下を登録
・無料メンバーのみのトピック:muryou_topic
・muryou_topicに所属するユーザー
2)アプリロード時にサーバーより、以下取得
・ユーザー情報を取得
・自分が所属するトピック情報を取得
取得したトピック名を端末に登録する。(※)
3)サーバープログラム(PHP、JAVA、RUBY等)でPUSH通知
1.TOPIC制御の用意
クライアント側で作成できるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { FIRApp.configure() let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) application.registerUserNotificationSettings(settings) application.registerForRemoteNotifications() NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotificaiton), name: kFIRInstanceIDTokenRefreshNotification, object: nil) if let refreshedToken = FIRInstanceID.instanceID().token() { print("InstanceID token: \(refreshedToken)") connectToFcm() } return true } func tokenRefreshNotificaiton(notification: NSNotification) { if let refreshedToken = FIRInstanceID.instanceID().token() { print("InstanceID token: \(refreshedToken)") connectToFcm() } } func connectToFcm() { FIRMessaging.messaging().connectWithCompletion { (error) in if error != nil { print("Unable to connect with FCM. \(error)") } else { print("Connected to FCM.") FIRMessaging.messaging().subscribeToTopic("/topics/トピック名") } } } |
2.所属するトピックを端末に登録(※)
クライアント端末起動時に以下のコードをより、自分のTOKENをトピックに登録します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// [START refresh_token] func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { print("Firebase registration token: \(fcmToken)") Messaging.messaging().subscribe(toTopic: "/topics/testAAA") NSLog("Subscribed to testAAA topic"); // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. } |
3.特定TOPICへの通知方法
サーバーよりPHPを使用して以下のコードで実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$googleapi_key = "AAAAfdaO050:APA91bHZA6EUBF7Di-3QgdfDtW1nuRSY9W59JmktssM7zPNk5s34dTk27RsNzbKk53Wnbm-jxZNbbMt3XKu287nCSQmzBvIhvKJi48UpR-dnHBAUiR-EIkivnbT4bE28ZjnQ6ZvYEvQq"; $apiKey = $googleapi_key ; // Firebase console:Overview > プロジェクトの設定 > クラウドメッセージング > サーバーキー $url = "https://fcm.googleapis.com/fcm/send"; $headers = array( "Authorization: key=".$apiKey, "Content-Type: application/json" ); $fields = array( "to" => "/topics/testAAA", "priority" => "high", "notification" => array( "title" => "This is a Firebase Cloud Messaging Topic Message!", "body"=> "テスト" ) ); $handle = curl_init(); curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_HTTPHEADER, $headers); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($handle); curl_close($handle); //return $result; print $result; |
メルマガ登録をお願いします。
素敵な?情報がいつもあなたに届くようになります。(itmnewsの記事が届きます。)お役に立つかどうかわかりませんが頑張りますっ。登録してみてください。