1
/
5

Androidアプリでプッシュ通知連携した時の設定関連について【株式会社ライトコード】

弊社エンジニアの記事になります。

はじめに

作業の中でWebシステム内のトリガーを条件に、Androidのアプリでプッシュ通知をしたい、ということがありました。
そのためにAWSのAmazonSNSとFirebaseを連携設定する感じでした。
要件としてはこんな感じです。

  1. AndroidアプリはFirebaseと連携している
  2. そのFirebase情報をAWSのAmazonSNSに連携する
  3. AmazonSNSからプッシュ通知を送信する

これらを対応していった時の流れを書いていきたいと思います。

Androidアプリの情報確認

まずは対象のAndroidアプリの証明書キーを取得してメモしておきます。
SHA-1の情報が必要になります。
以下は証明書情報の取得結果の例です。

Store: /Users/xxxx/.android/debug.keystore
Alias: AndroidDebugKey
MD5:aaaaaaaaaa
SHA1: bbbbbbbbbbbb
SHA-256: ccccccccccccc1Store: /Users/xxxx/.android/debug.keystore

Firebaseの設定

次にFirebaseの設定をします。
まずはFirebaseプロジェクトを準備し、CloudMessagingに対象のアプリを登録します。

【登録する内容】

  1. アプリのパッケージ名
  2. メモしておいたアプリの証明書キー

登録するとそのFirebaseのページで「google-services.json」がダウンロード出来るので取ってきます。

Firebase内で登録したアプリの設定画面に行くと、サーバーキーの文字列があるので、それをメモしておきます。

Androidアプリ内の組み込み

次にダウンロードしてきたjsonをAndroidアプリ内に組み込みます。
Androidアプリモジュールのルートディレクトリに配置します。
build.gradleにFirebaseSDKを追加して連携させます。

次にプッシュ通知が受け取れるメソッドを作成します。
今までの設定が済んでいれば「FirebaseMessagingService」というクラスが使えるはずなので、このクラスを継承した任意のクラスを作成します。

public class PushMessagingService extends FirebaseMessagingService {

この作成したクラス内で「onNewToken」メソッドをオーバーライドして使用することで端末のデバイストークンを取得できるようになります。

@Override
public void onNewToken(@NonNull String token) {
// token情報をログに出力
Log.d(TAG, "push: onNewToken: " + token);
}

同じクラス内で「onMessageRecived」メソッドをオーバーライドすることで、後述するAmazonSNSからプッシュ通知のメッセージ情報が取得できるようになります。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// 必要な処理を記載していく
}

ひとまず対象のAndroid端末にプッシュ通知を送信するため、デバイストークンを取得します。
上記メソッドを組み込んだアプリを起動して、ログとかに出してみます。
以下はログ出力結果の表示例です。

D/MainActivity: push:端末のデバイストークン:cI38・・・・・・・・・

AmazonSNSの設定

次にAWSのAmazonSNSの設定画面にいきます。
設定画面からAmazonSNSのプラットフォームアプリケーションを作成します。

任意のアプリケーション名を入れ、プッシュ通知プラットフォームを「Firebase Cloud Messaging(FCM)」に設定します。
そのあと、APIキーにメモしてたFirebaseのサーバーキーを入力します。

そうすると、さっきの一覧に作成したプラットフォームアプリケーションが追加されます。
これでFirebaseとAmazonSNSが紐づいた形になります。

Androidアプリにプッシュ通知を送信してみる

前述のメソッドより、送信対象の端末からデバイストークンを取得しておきます。
取得したデバイストークンをプラットフォームアプリケーションに登録します。

今回は動作確認したいので、AWSの画面入力からプッシュ通知を送信する感じで。
アプリケーションエンドポイント作成画面の「デバイストークン」の項目に値を入力して作成します。

登録すると端末ごとのARN(Amazon Resource Name)が設定されます。
AWS画面のARNごとにリンクができているので、そこから直接プッシュ通知が送信できます。

画面から送る時は以下のような感じでjson文字列が出来ます。
(文字列の先頭は「GCM」)

ひとまず、以下のパラメータを送るようにお試し。

  1. body:メッセージ本文1
  2. title:たいとる1
  3. sound:default_1

メッセージ発行すると対象の端末にメッセージが届きます。
ひとまずgetData()メソッドをログで確認。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getData().size()0) {
              Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}

【送信したjson】

{"GCM":"{\"data\":{\"body\":\"メッセージ本文 1\",\"title\":\"たいとる 1\",\"sound\":\"default_1\"}}"}

【getData()の中身】

D/PushMessagingService: Message data payload: {body=メッセージ本文 1, sound=default_1, title=たいとる 1}

プッシュ通知の表示設定

Androidアプリ内に

記事の続きは下のリンクをクリック!

https://rightcode.co.jp/blogs/45134

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「スマホアプリエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「エンジニアリングマネージャー」「営業」などを積極採用中です!

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?