androidアプリ作成をして、firebaseを使い端末にプッシュ通知で通知を送りたいと思っています。
Android Studioを使い、javaで作成をしています。
firebaseは一応うまく設定できたと思います。
一通りコードを書き終えて、実機の端末やエミュレーターのステータスバーには
表示されて通知は行っているのですが、
いわゆる私が思っていた通知という、スマートフォンにポップアップで
スマートフォン上部のあたりに通知される(ヘッドアップ通知)というと勉強したのですが、
ヘッドアップ通知が行えない状態です。
一応ステータスバーに通知は行っており、
firebaseの送信結果を見ても送れているという回数の結果も出ているので
なんとかいわゆるヘッドアップの(私が思う普通の)通知を行いたいと思っています。
複数サイトで調べて、やってみたことは
notificationの色々を探り
通知のチャンネルの重要度や優先度がある事を知り、
IMPORTANCE_HIGHや古いアンドロイドバージョンに対しては.setPriority(Notification.PRIORITY_HIGH)
と記載することで重要度が高く、ヘッドアップ通知が行われていくであろうと読み、
またバイブや音を鳴らす通知を行うと、
それもヘッドアップ通知につながると読みまして、
実際のアプリでそう設定するかは別で、とりあえずヘッドアップをまずはやるために
音も鳴らしてみたり、IMPORTANCE_HIGHなどを出来るだけやってみましたが、
ヘッドアップはない状態です。
Android.Manifest.xml
java
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.testbutton"> 4 5 <uses-permission android:name="android.permission.INTERNET" /> 6 <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/> 7 8 9 <application 10 android:allowBackup="true" 11 android:icon="@mipmap/ic_launcher" 12 android:label="@string/app_name" 13 android:roundIcon="@mipmap/ic_launcher_round" 14 android:supportsRtl="true" 15 android:theme="@style/AppTheme"> 16 17 <activity android:name=".MainActivity"> 18 <intent-filter> 19 <action android:name="android.intent.action.MAIN" /> 20 21 <category android:name="android.intent.category.LAUNCHER" /> 22 </intent-filter> 23 </activity> 24 25 26 <service 27 android:name=".MyFirebaseMessagingService" 28 android:exported="false"> 29 <intent-filter> 30 <action android:name="com.google.firebase.MESSAGING_EVENT" /> 31 </intent-filter> 32 </service> 33 34 35 36 </application> 37 38 39 <meta-data 40 android:name="com.google.firebase.messaging.default_notification_channel_id" 41 android:value="MyNotification"/> 42 43 <meta-data 44 android:name="com.google.firebase.messaging.default_notification_icon" 45 android:resource="@drawable/ic_stat_ic_notification" /> 46 47 <meta-data 48 android:name="com.google.firebase.messaging.default_notification_color" 49 android:resource="@color/background" /> 50</manifest>
MyFirebaseMessagingService.java
java
1package com.example.testbutton; 2 3import android.app.Notification; 4import android.app.NotificationChannel; 5import android.app.NotificationManager; 6import android.app.PendingIntent; 7import android.content.Context; 8import android.content.Intent; 9import android.graphics.Color; 10import android.os.Build; 11import android.util.Log; 12 13import androidx.core.app.NotificationCompat; 14import androidx.core.app.NotificationManagerCompat; 15 16import com.example.testbutton.R; 17import com.google.firebase.messaging.FirebaseMessagingService; 18import com.google.firebase.messaging.RemoteMessage; 19 20import java.util.Map; 21 22 23public class MyFirebaseMessagingService extends FirebaseMessagingService { 24 25 private static final String TAG = "【Firebaseテスト中】"; 26 27 @Override 28 public void onMessageReceived(RemoteMessage remoteMessage) { 29 30 // 31 Log.d(TAG, "From: " + remoteMessage.getFrom()); 32 33 // Check if message contains a data payload. 34 if (remoteMessage.getData().size() > 0) { 35 Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 36 37 if (/* Check if data needs to be processed by long running job */ true) { 38 // For long-running tasks (10 seconds or more) use WorkManager. 39 //scheduleJob(); 40 } else { 41 // Handle message within 10 seconds 42 // handleNow(); 43 } 44 45 } 46 47 // Check if message contains a notification payload. 48 if (remoteMessage.getNotification() != null) { 49 Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 50 } 51 52 53 } 54 55 56 private void notice() 57 { 58 final String CHANNEL_ID = "MyNotification"; 59 final int ID = 0; 60 61 62 NotificationCompat.Builder mBuilder; 63 64 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 65 NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"MyNotification", NotificationManager.IMPORTANCE_HIGH); 66 channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); 67 channel.enableVibration(true); 68 69 NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 70 manager.createNotificationChannel(channel); 71 mBuilder = new NotificationCompat.Builder(this, "default"); 72 }else{ 73 mBuilder = new NotificationCompat.Builder(this); 74 } 75 76 77 mBuilder.setSmallIcon(R.drawable.ic_stat_name) 78 .setContentTitle("ApduService") 79 .setContentText("processCommandApdu") 80 .setColor(Color.rgb(0,255,0)) 81 .setDefaults(Notification.DEFAULT_VIBRATE) 82 .setAutoCancel(true) 83 .setWhen(System.currentTimeMillis()) 84 .setPriority(Notification.PRIORITY_HIGH) 85 .setVibrate(new long[]{100, 0, 100, 0, 100, 0}); 86 87 NotificationManagerCompat manager = NotificationManagerCompat.from(this); 88 manager.notify(ID, mBuilder.build()); 89 } 90 91 92 93} 94
実機とエミュレーターどちらでも試しているので、実機が古いということはないと思われる点と
そもそも自分は (通知=あの画面前面に出てくる通知) と思っていたので、
ヘッドアップ通知という用語すら知らなかったのですが、
しっかりとヘッドアップ通知を行うにあたり、どこか自分がミスをしていると思いますので、
なんとかご指導いただけたらと思います・・ 宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。