Go言語(Golang)入門~第11回目~

笹川先生
(株)ライトコードの笹川(ささがわ)です!
今回は、Firebase Cloud Messaging(FCM)をGoで送信して、Androidで受け取ってみようと思います。
それでは、いってみましょう!
前回の記事はこちら
2019.11.13Go言語(Golang)入門~第10回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 今回は、前回に引...
Firebaseの認証をしよう

FCMは、Firebaseのサービスのひとつなので、Firebaseへの認証が必要となります。
そのため、まずは、認証を終わらせましょう!
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 34 35 36 37 38 | package main import ( "context" "log" "cloud.google.com/go/firestore" firebase "firebase.google.com/go" "google.golang.org/api/option" ) func main() { ctx := context.Background() // Firebase初期化 _, err := firebaseInit(ctx) if err != nil { log.Fatal(err) } } // firebaseInit Firebaseの初期化 func firebaseInit(ctx context.Context) (*messaging.Client, error) { // Use a service account sa := option.WithCredentialsFile("path/to/serviceAccount.json") app, err := firebase.NewApp(ctx, nil, sa) if err != nil { log.Fatalln(err) return nil, err } client, err := app.Messaging(ctx) if err != nil { log.Fatalln(err) return nil, err } return client, nil } |
Firestore の時との違いは、 app から取得する client が Messaging になっている所になります。
同じ Firebase で提供されているサービスなので、ほぼ実装が変わらず、使い回せるのは楽ですね。
ちなみに、導入の部分は第2回で詳しく紹介していますので、そちらもご参考ください。
2019.09.17Go言語(Golang)を習得したい!~第2回~
(株)ライトコードの笹川(ささがわ)です。 前回に引き続き、今回もGo言語(Gol...
メッセージを作ってみよう
今回は、iOS と Andorid の両方に届き、Android のアプリが kill状態でも届くように作ってみます。
Goで送信する場合は、すでにメッセージ送信用の構造体が用意されているので、そちらに当て込んでいきます。
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 34 | func createMessage(topic string, title string, body string, tag string) *messaging.Message { // android用の設定初期化 android := new(messaging.AndroidConfig) // 通知優先度設定 android.Priority = "high" // android用の通知設定初期化 androirNotification := new(messaging.AndroidNotification) // チャンネル設定(Android8以降は必須。受信する側の設定と合わせる) androirNotification.ChannelID = "channel_1" // タグ設定(あってもなくてもいい) androirNotification.Tag = tag android.Notification = androirNotification // 大本の通知設定の初期化 notification := new(messaging.Notification) // タイトル notification.Title = title // 本文 notification.Body = body // メッセージ構造体の初期化 message := &messaging.Message{ // データの設定(通知を出す前にデータだけ受け取りたいときはこっちに設定する) Data: map[string]string{ "title": title, "body": body, }, // Android用の設定 Android: android, // 通知設定 Notification: notification, // 配信先(トピック) Topic: topic, } return message } |
今回は、複数端末で受信するために、トピック宛に送信するように作成しました。
送信する際の詳しいオプションなどは、以下のドキュメントに詳しく載っています。
【参考ドキュメント】
https://firebase.google.com/docs/cloud-messaging/concept-options?hl=ja
本記事でご紹介している内容以外の方法は、参考になるかと思います。
送信してみよう
Android 側での受信設定の説明は、以下の公式ドキュメントをご参考ください。
【公式ドキュメント】
https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja
適当な「タイトル」と「トピック」を設定して実行してみます。
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | package main import ( "context" "log" firebase "firebase.google.com/go" "firebase.google.com/go/messaging" "google.golang.org/api/option" ) func main() { ctx := context.Background() // Firebase初期化 client, err := firebaseInit(ctx) if err != nil { log.Fatal(err) } message := createMessage("test", "テスト送信", "これはテスト送信です。", "test1") // Send a message to the devices subscribed to the provided topic. response, err := client.Send(ctx, message) if err != nil { log.Fatalln(err) } // Response is a message ID string. log.Println("Successfully sent message:", response) } func createMessage(topic string, title string, body string, tag string) *messaging.Message { // android用の設定初期化 android := new(messaging.AndroidConfig) // 通知優先度設定 android.Priority = "high" // android用の通知設定初期化 androirNotification := new(messaging.AndroidNotification) // チャンネル設定(Android8以降は必須。受信する側の設定と合わせる) androirNotification.ChannelID = "channel_1" // タグ設定(あってもなくてもいい) androirNotification.Tag = tag android.Notification = androirNotification // 大本の通知設定の初期化 notification := new(messaging.Notification) // タイトル notification.Title = title // 本文 notification.Body = body // メッセージ構造体の初期化 message := &messaging.Message{ // データの設定(通知を出す前にデータだけ受け取りたいときはこっちに設定する) Data: map[string]string{ "title": title, "body": body, }, // Android用の設定 Android: android, // 通知設定 Notification: notification, // 配信先(トピック) Topic: topic, } return message } // firebaseInit Firebaseの初期化 func firebaseInit(ctx context.Context) (*messaging.Client, error) { // Use a service account sa := option.WithCredentialsFile("path/to/serviceAccount.json") app, err := firebase.NewApp(ctx, nil, sa) if err != nil { log.Fatalln(err) return nil, err } client, err := app.Messaging(ctx) if err != nil { log.Fatalln(err) return nil, err } return client, nil } |
確認
実行すると、上記の通知が、Andoridアプリを起動していなくても届くはずです。
無事、届いてますね!
さいごに
Go言語(Golang)から FCM を送信の採用することは多くないと思いますが、簡単なチャットアプリのAPIなどでは利用できそうですね!
ちなみに、笹川の個人開発では『サポ魂』というアプリで、ツイッター検索したデータをユーザーに FCM で届けています。
それにしても、Firebaseのサービスは便利です。
個人的には、今後も色々使ってみたいサービスですので、皆様も是非使ってください。
なお、今回作成したgoファイルは、こちらのリポジトリにて管理しています。
【リポジトリ】
https://github.com/noriyuki-sasagawa/go_example/
関連記事
2019.09.13Go言語(Golang)を習得したい! 笹川先生 (株)ライトコードでモバイルアプリケーション開発をしている笹川(ささが...
2019.09.17Go言語(Golang)を習得したい!~第2回~
(株)ライトコードの笹川(ささがわ)です。 前回に引き続き、今回もGo言語(Gol...
2019.09.26Go言語(Golang)入門~第3回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です。 今回でGo言語(G...
2019.10.02Go言語(Golang)入門~第4回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です 今回も、Go言語(G...
2019.10.09Go言語(Golang)入門~第5回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 前回は、RESR ...
2019.10.17Go言語(Golang)入門~第6回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 先日、Twitte...
2019.10.23Go言語(Golang)入門~第7回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 今回は、前回に引き...
2019.10.30Go言語(Golang)入門~第8回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 前回は、Twitt...
2019.11.06Go言語(Golang)入門~第9回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 前回は、Goの環境...
2019.11.13Go言語(Golang)入門~第10回目~ 笹川先生 (株)ライトコードの笹川(ささがわ)です! 今回は、前回に引...
ライトコードよりお知らせ

にゃんこ師匠

ミツオカ

にゃんこ師匠

ミツオカ

にゃんこ師匠

ミツオカ
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね! 一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!
当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。
また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!
なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。
書いた人はこんな人
- 笹川 (社員)
- 新潟生まれ新潟育ち本業はモバイルアプリエンジニア。
日々、猫(犬)エンジニアとして活躍中!