質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

解決済

アンドロイドアプリでFirebaseのプッシュ通知を受けた時にアプリにバッジをつける方法を教えてください

K_Pearl
K_Pearl

総合スコア22

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

1回答

0リアクション

1クリップ

3046閲覧

投稿2020/01/09 05:44

編集2020/01/14 11:53

現在アンドロイドのWebViewアプリをKotlinを使ってAndroidSutudioで制作中です。
Firebase を使ってプッシュ通知を実装したのですが、そのプッシュ通知が届いた際
アプリを開いてない状態ならばアプリにバッジをつけたいと考えています。
ShortcutBadgerをつかってバッジを表示させることは出来ました。
後はプッシュ通知が届いた際にバッジがつくようにするだけなのですが難航しています。
わかる方にアドバイスをいただきたいのです。
どうかよろしくお願いいたします。
こちらがFirebase のプッシュ通知のコードです。
通知を受信したときの処理の中にバッジのコードを書いてみましたが上手くいきませんでした。
回答宜しくお願い致します。

import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.media.RingtoneManager import android.os.Build import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.PRIORITY_MAX import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage import me.leolin.shortcutbadger.ShortcutBadgeException import me.leolin.shortcutbadger.ShortcutBadger import java.util.* class MyFirebaseMessagingService : FirebaseMessagingService() { // 新しいトークンが生成された時の処理 // 中でサーバにトークンを送信する処理などを定義 override fun onNewToken(p0: String) { super.onNewToken(p0) // チャンネルidを設定 addChannelId() } // 通知を受信したときの処理 override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) try { // 今回は通知からタイトルと本文を取得 val title: String = message?.notification?.title.toString() val text: String = message?.notification?.body.toString() // 通知表示 sendNotification(title, text) ShortcutBadger.applyCountOrThrow(this, 1) } catch (e: ShortcutBadgeException) { ShortcutBadger.applyCount(this, 1) } } // 通知表示 および 見た目の設定 private fun sendNotification(title: String, text: String) { // 通知タップ時に遷移するアクティビティを指定 val intent = Intent(this, MainActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) // 何度も遷移しないようにする(1度だけ!) val pendingIntent: PendingIntent = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_ONE_SHOT) // 通知メッセージのスタイルを設定(改行表示に対応) val inboxStyle = NotificationCompat.InboxStyle() val messageArray: List<String> = text.split("\n") for (msg: String in messageArray) { inboxStyle.addLine(msg) } // 通知音の設定 val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) // 通知の見た目を設定 val notificationBuilder = NotificationCompat.Builder(this, resources.getString(R.string.default_notification_channel_id)) .setContentTitle(title) .setContentText(text) // ステータスバーに表示されるアイコン .setSmallIcon(R.drawable.ic_stat_name) // 上で設定したpendingIntentを設定 .setContentIntent(pendingIntent) // 優先度を最大化 .setPriority(PRIORITY_MAX) // 通知音を出すように設定 .setSound(defaultSoundUri) // 通知を実施 // UUIDを付与することで各通知をユニーク化 val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val uuid = UUID.randomUUID().hashCode() notificationManager.notify(uuid, notificationBuilder.build()) // Android 8.0 以上はチャンネル設定 必須 // strings.xml に channel_id を指定してください if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { notificationBuilder.setChannelId(resources.getString(R.string.default_notification_channel_id)) } } // チャンネルの設定 private fun addChannelId() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager // ヘッドアップ通知を出す場合はチャンネルの重要度を最大にする必要がある val channel = NotificationChannel( resources.getString(R.string.default_notification_channel_id), resources.getString(R.string.default_notification_channel_name), NotificationManager.IMPORTANCE_HIGH ) // ロック画面における表示レベル channel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC // チャンネル登録 manager.createNotificationChannel(channel) } } }

こちらがプッシュ通知を受ける側のMainActivityです。

import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.ContextMenu import android.view.KeyEvent import android.view.MenuItem import android.view.View import android.webkit.WebView import android.webkit.WebViewClient import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity() : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) webView.loadUrl("https://www.google.com/") //JavaScriptを有効化 webView.settings.javaScriptEnabled = true //ページ遷移時に外部ブラウザ表示抑制コード webView.setWebViewClient(object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { return false } }) //コンテキストメニュー表示 registerForContextMenu(webView) imageBtnHome.setOnClickListener { webView.loadUrl("https://www.google.com/") imageBtnHome.setImageResource(R.drawable.ic_home_ol_blue) imageBtnForecast.setImageResource(R.drawable.ic_yosou2_ol) imageBtnResult.setImageResource(R.drawable.ic_result_ol) imageBtnRaceTrack.setImageResource(R.drawable.ic_place2_ol) } imageBtnForecast.setOnClickListener { webView.loadUrl("https://www.google.com/") imageBtnForecast.setImageResource(R.drawable.ic_yosou2_ol_blue) imageBtnHome.setImageResource(R.drawable.ic_home_ol) imageBtnResult.setImageResource(R.drawable.ic_result_ol) imageBtnRaceTrack.setImageResource(R.drawable.ic_place2_ol) } imageBtnResult.setOnClickListener { webView.loadUrl("https://www.google.com/") imageBtnResult.setImageResource(R.drawable.ic_result_ol_blue) imageBtnHome.setImageResource(R.drawable.ic_home_ol) imageBtnForecast.setImageResource(R.drawable.ic_yosou2_ol) imageBtnRaceTrack.setImageResource(R.drawable.ic_place2_ol) } imageBtnRaceTrack.setOnClickListener { webView.loadUrl("https://www.google.com/") imageBtnRaceTrack.setImageResource(R.drawable.ic_place2_ol_blue) imageBtnHome.setImageResource(R.drawable.ic_home_ol) imageBtnForecast.setImageResource(R.drawable.ic_yosou2_ol) imageBtnResult.setImageResource(R.drawable.ic_result_ol) } } //端末の戻るボタンでWebViewブラウザをバックさせる override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_BACK && this.webView!!.canGoBack()) { this.webView!!.goBack() return true } return super.onKeyDown(keyCode, event) }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

kakajika

2020/01/14 04:23

問題の箇所のコードが呼び出されていることは確認しましたか?それと、FCMのプッシュ通知を送る側のコードも載せてもらえれば回答できるかもしれません。
K_Pearl

2020/01/14 11:33

ありがとうございます。 プッシュ通知を受ける側のコードも追加しました。 当方初心者なので至らない点があれば申し訳ありません。 どうぞよろしくお願い致します。
kakajika

2020/01/25 02:25

まずはログ等を使ってコードが呼び出されているのかどうか確認してください。 それと、プッシュ通知を受け取る側のコードは十分なので、送る側(サーバー側)のコードを載せてください。なんとなく原因は想像がつくのですが、コードを見ないことには確信がないので回答できません。
K_Pearl

2020/01/27 11:52

アドバイスありがとうございます。 なんとか自分で解決できました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。