2016-09-22 8 views
2

次のコードを使用してfirebaseコンソールから送信されたfcmメッセージを受信して​​いますが、この機能は呼び出されません。代わりに、アプリがバックグラウンドにあるときに私のランチャークラスでメッセージを受け取ることができますが、アプリがフォアグラウンドにあるときは取得できません。アプリケーションがフォアグラウンドにあるときにonMessageReceived()が呼び出されない

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

private static final String TAG = "MyFirebaseMsgService"; 
String message=""; 
Map<String, String> m1; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    //Displaying data in log 
    //It is optional 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 
    System.out.println("---------------------"); 

    message = remoteMessage.getNotification().getTitle(); 
    m1= remoteMessage.getData(); 
    System.out.println("=============="+m1); 
    System.out.println("=============="+m1.get("url")); 

    //Calling method to generate notification 
    //sendNotification(remoteMessage.getNotification().getBody()); 
    //sendNotification_test(message); 
    createNotification(m1,remoteMessage.getNotification().getBody()); 
} 


private void createNotification(Map<String,String> payload, String title){ 

    Intent intent = new Intent(this, LoginActivity.class); 


    intent.putExtra("url",payload.get("url")); 
    intent.putExtra("package",payload.get("package")); 
    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.mipmap.ic_launcher) 
      .setContentTitle("FCM Message") 
      .setContentText(title) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

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

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

マニフェスト

<service 
    android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseMessagingService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 

<service 
    android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseInstanceIDService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
    </intent-filter> 
</service> 
+0

fcmメッセージのペイロードはどのように見えるのですか – tyczj

答えて

4
私はマニフェストでアプリケーションタグのうち、サービスの宣言を入れていた

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service 
      android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
      </intent-filter> 
     </service> 

     <service 
      android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 
    </application> 

は、これが働いていました!

0

アプリがフォアグラウンドで、その後onMessageReceived()メソッドが呼び出されますされている場合、Firebaseコンソールを使用して送信された場合は、この

* Called when message is received. 
* 
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging. 
*/ 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    // There are two types of messages data messages and notification messages. Data messages are handled 
    // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type 
    // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app 
    // is in the foreground. When the app is in the background an automatically generated notification is displayed. 
    // When the user taps on the notification they are returned to the app. Messages containing both notification 
    // and data payloads are treated as notification messages. The Firebase console always sends notification 
    // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options 
    // 
    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()); 
    } 

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

    //The message which i send will have keys named [message, image, AnotherActivity] and corresponding values. 
    //You can change as per the requirement. 

    //message will contain the Push Message 
    String message = remoteMessage.getData().get("message"); 
    //imageUri will contain URL of the image to be displayed with Notification 
    String imageUri = remoteMessage.getData().get("image"); 
    //If the key AnotherActivity has value as True then when the user taps on notification, in the app AnotherActivity will be opened. 
    //If the key AnotherActivity has value as False then when the user taps on notification, in the app MainActivity will be opened. 
    String TrueOrFlase = remoteMessage.getData().get("AnotherActivity"); 

    //To get a Bitmap image from the URL received 
    bitmap = getBitmapfromUrl(imageUri); 

    sendNotification(message, bitmap, TrueOrFlase); 

} 

を試してみてください。したがって、URLからフェッチされたイメージanの通知がユーザに表示されます。しかし、アプリがバックグラウンドまたはキル状態の場合、onMessageReceived()メソッドは呼び出されません。したがって、あなたのアンドロイドデバイスの通知バーには、メッセージだけを含む簡単な通知が表示されます。

あなたは

https://fcm.googleapis.com/fcm/send 

のContent-Typeを使用する必要があります:アプリケーション/ JSON 認証:キー= AIza ************ adrTY

{「データを":{ "画像":" https://ibin.co/2t1lLdpfS06F.png " "メッセージ": "APIを使用Firebaseプッシュメッセージ" "AnotherActivity": "真" }、 "を":" f25gYF3 ******** ************** HLI " }

メッセージングAPIの使用:APIを使用してメッセージを送信するには、AdvancedREST Clientというツール(クロム拡張機能)を使用し、次のパラメータを使用してメッセージを送信します。

関連する問題