1

Firebaseは、firebaseコンソールを使用して以前に行われたGCMのようなサーバを使用して、プッシュ通知を送信する2つの方法を提供します。今度はサーバーをGCMからFirebaseに変換していますので、アプリでFCM通知を受信して​​表示する必要があります。サーバで送信されたFCM Firebase通知を表示する方法

私は公式のfirebaseウェブサイトの実装を完了し、サンプルコードを実行しましたが、私はこの部分に固執しています。サーバーがFirebaseにプッシュ通知を送信し、Firebaseが自分のアプリにsendを送信すると、RemoteMessageパラメータのonMessageReceivedメソッドで通知を受け取ります。メッセージがRemoteMessageパラメータ内にあることはわかっていますが、Androidベースのデバイス通知バーに通知テキストを表示する方法については、Firebaseの公式ドキュメントにガイドやサンプルコードがありません。

公式のガイドでわかるように、RemoteMessageパラメータから問題なくメッセージを抽出する方法は説明していません。私はあなたが内部を検索して文字列を見つけることができることを知っていますが、これを正しく安全に処理する方法についての公式ガイドを探したいと思います。公式ドキュメントで

あなたが持っているだけで、この:あなたは、サーバーからあなたをJSON onMessageRecieveを受け取るだろう

private void sendNotification(String messageBody) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = 
       new NotificationCompat.Builder(this) 
         .setSmallIcon(R.drawable.ic_main) 
         .setContentTitle("FCM Message") 
         .setContentText(messageBody) 
         .setAutoCancel(true) 
         .setSound(defaultSoundUri) 
         .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
+0

チェック[この](https://stackoverflow.com/questions/45875859/fcm-onmessagereceived-not-calling-android/45880920#45880920) – Maddy

+0

良いポスト私は慎重にそれを読み込みます@Maddy – NullPointerException

+0

あなたを助けてくれてありがとう:) – Maddy

答えて

0

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) {  
    // TODO(developer): Handle FCM messages here. 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 

    // Check if message contains a data payload. 
    if (remoteMessage.getData().size() > 0) { 
     Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 
     // Handle message within 10 seconds  
    } 

    // Check if message contains a notification payload. 
    if (remoteMessage.getNotification() != null) { 
     Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
    } 

    // Also if you intend on generating your own notifications as a result of a received FCM 
    // message, here is where that should be initiated. See sendNotification method below. 
} 

そして(ガイドに呼び出されてされていない)、このそのjsonを解析して値を取得する必要があります。値を解析すると、sendNotification()で送信できます。必要なものを表示してください。

0

この私がsendNotificationを()の代わりにaddNotifcationを()を使用していますのようなものなものは

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
private static final String TAG = "FCM Service"; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getData().get("body")); 
    addNotification(remoteMessage.getData().get("body"), remoteMessage.getData().get("Nick")); 
} 

private void addNotification(String message, String title) { 
    NotificationCompat.Builder builder = 
      (NotificationCompat.Builder) new NotificationCompat.Builder(this); 
     builder.setSmallIcon(R.mipmap.ic_launcher1) 
       .setContentTitle(title) 
       .setContentText(message); 

    Intent notificationIntent = new Intent(this, app.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(contentIntent); 

    // Add as notification 
    NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    manager.notify(0, builder.build()); 
} 
0

まずonMessageReceived()showNotification

ため

showNotification(remoteMessage.getData()); 

機能でこの

private static NotificationManager mNotificationManager; 

書き込み、これを宣言する

public void showNotification(final Map<String, String> data) { 
    mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    final Intent notificationIntent = new Intent(getApplicationContext(), SplashActivity.class); 
    PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
     // The user-visible name of the channel. 
     CharSequence name = "Name"; 
     // The user-visible description of the channel. 
     String description = "Description"; 
     int importance = NotificationManager.IMPORTANCE_HIGH; 
     NotificationChannel mChannel = new NotificationChannel(DEFAULT_CHANNEL_ID, name, importance); 
     // Configure the notification channel. 
     mChannel.setDescription(description); 
     mChannel.enableLights(true); 
     // Sets the notification light color for notifications posted to this 
     // channel, if the device supports this feature. 
     mChannel.setLightColor(Color.RED); 
     mChannel.enableVibration(true); 
     mChannel.setVibrationPattern(NOTIFICATION_VIBRATION_PATTERN); 
     mNotificationManager.createNotificationChannel(mChannel); 
    } 


    Notification mNotification = new NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID) 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(data.get(AppConstant.MESSAGE))) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) 
      .setContentTitle("App name") 
      .setContentText(data.get(AppConstant.MESSAGE)) 
      .setContentIntent(pi) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setAutoCancel(true) 
      .setChannelId(DEFAULT_CHANNEL_ID) 
      .build(); 
    mNotificationManager.notify(0, mNotification); 
} 
0

以下の方法をチェックしてください。正常に動作しています。通知の際にサーバーからjsonデータを取得しています。

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     AppLog.Log(TAG, "From: " + remoteMessage.getFrom()); 
     JSONObject json = null; 

     if (remoteMessage.getData().size() > 0) { 
      Log.v(TAG, "Message data " + remoteMessage.getData()); 

      json = new JSONObject(remoteMessage.getData()); 
      AppLog.Log(TAG, "Json object " + json); 

     } 

     if (json != null) { 

      try { 
       int icon = R.mipmap.ic_launcher; 
       int mNotificationId = 001; 
       // MainDrawerActivity is the class which open on the click of notification in status bar 
       Intent intent = new Intent(this, MainDrawerActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

       //FLAG_UPDATE_CURRENT is important 
       PendingIntent pendingIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT); 


       NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
         this); 
       Notification notification = mBuilder.setSmallIcon(icon).setTicker("your title").setWhen(0) 
         .setAutoCancel(true) 
         .setContentTitle("your title") 
         .setStyle(new NotificationCompat.BigTextStyle().bigText("message")) 
         .setContentIntent(pendingIntent) 
         .setContentText("message").build(); 

       NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
       notificationManager.notify(mNotificationId, notification); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 
関連する問題