問題の説明
Android OでNotification
を送信しようとすると、NotificationChannel
をに指定する必要がありますに送る。
このNotificationCompat.Builder(this)
のような古い方法(チャネルを設定しない)を使用すると、Notification
は表示されません。
このNotificationCompat.Builder(this, "invalid")
またはNotificationCompat.Builder(this, "")
のような無効なチャネルについても同じことが言えます。
Firebase Cloud Messagingを介して通知を送信し、通知チャネルのないバックグラウンドでアプリケーションを使用している場合指定すると、 "Miscellaneous"チャネルでの通知になります。
上記のフォアグラウンドで同じことを実行しようとすると、機能せず、名前 "Miscellaneous"およびid "の通知チャネルも作成されません。 {package} .MISCELLANEOUS "そしてそれを介して送信します。私がそれをすると何が起こるかは次のとおりです:
[〜#〜] fcm [〜#〜]のようなチャネルなしで通知を送信するにはどうすればよいですか?通常の "その他"チャネル?
上で述べたように、これはFCM通知で発生しますが、たとえばGmailもその他のチャネルを使用します。 では、どのように使用しますか?
それが通常使用できないならば、彼らは雑多なチャンネルを削除したであろうと私は信じます。
このコードが「その他」の通知チャネルに通知を送信しないのはなぜですか。実際には通知を送信していません(Android Oでのみ、コードは下位のAndroidバージョン)。
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).notify(1, NotificationCompat.Builder(this, NotificationChannel.DEFAULT_CHANNEL_ID)
.setSmallIcon(R.drawable.small_icon)
.setContentTitle(URLDecoder.decode("Title", "UTF-8"))
.setContentText(URLDecoder.decode("Text", "UTF-8"))
.setColor(ContextCompat.getColor(applicationContext, R.color.color))
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setContentIntent(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT))
.build())
そのチャネルのIDはfcm_fallback_notification_channel
。 Firebase-messagingライブラリはそれを内部で作成します。
別の回答 で述べたように、Androidシステムはfcm_fallback_notification_channel
ただし、最初のプッシュ通知を管理する必要があるまでシステムはチャネルを作成しないため、注意が必要です。したがって、FirebaseMessagingService
クラスの拡張機能内ですべての通知を管理すると、チャネルが存在せず、次のようなエラーが発生する可能性があります。
Android.app.RemoteServiceException: Bad notification for startForeground: Java.lang.RuntimeException: invalid channel for service notification: Notification(channel=fcm_fallback_notification_channel pri=-2 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)
通知を作成する前にデフォルトのチャネルが存在するかどうかを確認し、存在しない場合は作成することをお勧めします。
private void createDefaultNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = getSystemService(NotificationManager.class);
if (notificationManager.getNotificationChannel("fcm_fallback_notification_channel") != null) {
return;
}
String channelName = getString(R.string.fcm_fallback_notification_channel_label);
NotificationChannel channel = new NotificationChannel("fcm_fallback_notification_channel", channelName, NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
}