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

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

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

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

Android Studio

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

Kotlin

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

Q&A

解決済

1回答

4964閲覧

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

K_Pearl

総合スコア22

Firebase

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

Android Studio

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

Kotlin

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

0グッド

1クリップ

投稿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) }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

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

回答1

0

自己解決

このようにプッシュ通知を送る側のクラスの中にonCreateを作ってその中に書いたら上手くいきました。

class MyFirebaseMessagingService : FirebaseMessagingService() { override fun onCreate(){ super.onCreate() ShortcutBadger.applyCount(this,1) } }

投稿2020/01/27 11:55

K_Pearl

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問