2

Я включил систему push-уведомлений с Firebase в свой проект и хорошо работает. Немногие clarficiationИнтеграция Firebase с использованием WakefulBroadcastReceiver

шаги, чтобы следовать за интеграцию Firebase

  1. Созданный файл JSon из firebase консоли и добавил в моем проекте (Google-services.json)
  2. Dependency компилировать LIB добавляемые в моей сборки. gradel (root, а также внутри приложения)

  3. AndroidManifest.xml добавил следующий сервер.

    <service 
    android:name="com.myfirebase.myfirebasemsgservice" 
    android:enabled="true" 
    android:exported="true"> 
    <intent-filter> 
    <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
    </service> 
    
  4. Внутри «myfirebasemsgservice» добавил следующую строку и исходя и работает хорошо.

    public void onMessageReceived(RemoteMessage fcmMessage) 
    { 
    Log.d(TAG, "From: " + fcmMessage.getFrom()); 
    
    if (fcmMessage.getData().size() > 0) { 
        Log.d(TAG, "Message data payload: " + fcmMessage.getData()); 
        Log.d(TAG, "Message data payload: " + fcmMessage.getData().toString()); 
    
  5. Я проверил и получил уведомление при отправке из firebase консоли, а также ARC (Advanced REST КЛИЕНТА). Я пробовал использовать полезную нагрузку и полезную нагрузку.

Мои разъяснения и как нам нужно интегрировать в firebase же, как показано ниже кода. Как мы это делали раньше? Любая идея и как мы должны интегрироваться, как это ?.

  1. AndroidManifest.xml - добавлено ранее.

        <receiver 
          android:name="com.mygcm.gcmbroadcastReceiver" 
         android:permission="com.google.android.c2dm.permission.SEND"> 
         <intent-filter> 
          <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
          <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
          <category android:name="${applicationId}" /> 
          </intent-filter> 
           </receiver> 
    
          <service android:name="com.mygcm.gcmIntentService" /> 
    
  2. gcmbroadcastReceiver добавил нижеследующий код.

     public class GcmBroadcastReceiver extends WakefulBroadcastReceiver 
        { 
        @Override 
         public void onReceive(Context context, Intent intent) { 
        ComponentName comp = new ComponentName(context.getPackageName(), 
        GCMIntentService.class.getName()); 
        startWakefulService(context, (intent.setComponent(comp))); 
        } 
        } 
    
  3. gcmIntentService добавил нижеследующий код.

      public class gcmIntentService extends IntentService { 
    
          @Override 
           protected void onHandleIntent(Intent intent) 
           { 
          Bundle extras = intent.getExtras(); 
           GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
          String messageType = gcm.getMessageType(intent); 
    
    try 
    { 
        if (!extras.isEmpty()) 
        { 
         if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) 
         { 
          Log.d("LogData",intent.getStringExtra(Constants.PAYLOAD)); 
         } 
         else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) 
         { 
          Log.d("LogData",intent.getStringExtra(Constants.PAYLOAD)); 
         } 
         else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) 
         { 
          Log.d("LogData",intent.getStringExtra(Constants.PAYLOAD)); 
         } 
        } 
    } 
    catch(Exception ignored) 
    { 
        ExceptionTrack exe_track=ExceptionTrack.getInstance(); 
    } 
    finally { 
        GcmBroadcastReceiver.completeWakefulIntent(intent); 
    } 
    

    }

+0

вам удалось найти решение? от того, что я знаю 'FirebaseInstanceIdReceiver - это WakefulBroadcastReceiver, который принимает события FirebaseInstanceId и FirebaseMessaging и доставляет их в класс, который вы получаете из FirebaseInstanceIdService.' – Poorya

ответ

1
<service 
     android:name=".fcm.MyFirebaseMessagingService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
     </intent-filter> 
    </service> 
    <service 
     android:name=".fcm.FireBaseInstanceID_Service"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
     </intent-filter> 
    </service> 

App Gradle

компиляции 'com.google.firebase: firebase-сообщения: 9.4.0' применить плагин: «com.google.gms .google-services '

Project Gradle classpath' com.google.gms: google-services: 3.0.0 '

Log.e ("token_id", FirebaseInstanceId.getInstance(). GetToken());

1
 import android.util.Log; 

import com.google.firebase.iid.FirebaseInstanceId; 
import com.google.firebase.iid.FirebaseInstanceIdService; 
import com.loyalty.preferences.LoyaltySharedpreference; 


public class FireBaseInstanceID_Service extends FirebaseInstanceIdService { 

    private static final String TAG = "MyFirebaseIIDService"; 

    @Override 
    public void onTokenRefresh() { 
     //Getting registration token 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     //Displaying token on logcat 
      } 

    private void sendRegistrationToServer(String token) { 

    } 


} 
+0

Refreshtoken не является проблемой, и мне это нравится только. Но мой вопрос, как я могу сделать такую ​​же интеграцию, используя WakefulBroadcastReceiver? ... – user2488539

+0

Получает уведомление, когда приложение удаляется из последнего используемого приложения. В моем случае это не работает. – Gopal

1
package com.example.fcm; 


import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 
import com.google.firebase.messaging.FirebaseMessagingService; 
import com.google.firebase.messaging.RemoteMessage; 




public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 
     Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 
     sendNotification(remoteMessage.getNotification().getBody()); 
    } 

    private void sendNotification(String messageBody) { 

     Intent intent = new Intent(this, SplashActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

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

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, notificationBuilder.build()); 



    } 
} 
+1

Это то, что я сделал сейчас и хорошо работаю. Но мой вопрос: как я могу сделать такую ​​же интеграцию, используя WakefulBroadcastReceiver? ... – user2488539

0

Пожалуйста, проверьте в другом устройстве. Потому что некоторые устройства не позволяют приложениям запускаться в фоновом режиме, изменяя настройки. Таким образом, службы Firebase отключены.

Я столкнулся с этой проблемой, поэтому я поделился с вами.