1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android Studioでpush通知のアイコンを設定する

Posted at

Firebase Cloud MessagingからAndroidへPush通知を送った際、アプリがバックグラウンドにある時はカスタムアイコンが表示されませんでした。後から考えてみれば文章をよく読んでなかっただけなのですが、性格上またやらかしそうなので忘備録としてまとめてみました。

##はじめに
push通知でカスタムアイコンを使用するためには、android studioにおいてアイコンを設定する必要があります。何も設定しないと、デフォルトの四角いアイコンが表示されます↓(これはこれでかわいい)。

カスタムアイコンの実装方法は、大まかに
①128×128pxの透過画像(png形式)を用意する
②android studioにおいてその画像を通知用のカスタムアイコンとして設定する
に分けられます。

①については、面倒くさいので偉大なる先人の知恵をお借りしたほうが正確かと思いますので説明は省略します(この記事あたりを参考にしてください)。

私がハマったのは②です。

ビルドも成功し、一見うまく行きました。
が、アプリがフォアグラウンドにいるときだけカスタムアイコンが表示され、アプリがバックグラウンドにいるときは、デフォルトの四角アイコンが表示されていたのです。

##うまくいった実装方法

結論から言うと

AndroidManifest.xml
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_name"/>

とすれば良いです。
android:resource以下はカスタムアイコンが入っているフォルダ名/ファイル名です。なお、.pngという拡張子は必要ありません。

##ダメだった実装方法
はずかしながら、上手くいかなかった実装方法を。

①FirebaseMessagingService内でsetSmallIcon()をする

MyFirebaseMessagingService

class MyFirebaseMessagingService: FirebaseMessagingService() {

    //中略
   
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
  
        //中略

        var messageBody: String? = ""
        var messageTitle: String? = ""
        if (remoteMessage.notification != null) {
            messageBody = remoteMessage.notification!!.body
            messageTitle = remoteMessage.notification!!.title
        }
        sendNotification(messageTitle!!, messageBody!!)
    }

    private fun sendNotification(messageTitle: String, messageBody: String) {

        //中略
      
        val notificationBuilder: NotificationCompat.Builder = NotificationCompat.Builder(
            this,
            channelId
        )   .setSmallIcon(R.drawable.ic_stat_name)//←コレ!
            .setContentTitle(messageTitle)
            .setContentText(messageBody)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent)
    }
}

よくよく考えてみれば、FirebaseMessagingService()のonMessageReceivedはアプリがフォアグラウンドにあるときに呼ばれるメソッドですね(公式。アプリがバックグラウンドにある際に四角アイコンになったのも納得。


②AndroidManifestのmeta-data android:nameに自分のアプリ名を入れる

AndroidManifest.xml
<meta-data android:name="com.example.myApp.default_notification_icon" android:resource="@drawable/ic_stat_name"/>

自分でやっておいてなんですが...アホかな。


③AndroidManifestのmeta-data android:nameに"smallIcon"を入れる

AndroidManifest.xml
<meta-data android:name="smallIcon" android:resource="@drawable/ic_stat_name"/>

どっかの記事で見た。昔の実装方法なんかな。

push通知を理解して、ぜひより良いAndroidライフを!
※ココ間違っとるよ〜〜とか、より良い実装方法あんで〜〜とかありましたら、ぜひコメントくださいまし。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?