Фоновое уведомление Android не работает в Firebase

Я просто добавляю функции чата в свое приложение после добавления основной функции приложений. Я начинаю внедрять push-уведомление Firebase в приложение и выполняю все шаги из официальной документации. Поэтому всякий раз, когда я отправляю сообщение из консоли уведомлений Firebase, оно показывает, когда приложение находится на переднем плане но когда приложение находится в фоновом режиме, оно показывает эти строки в logcat, но без уведомления

09-27 16:11:37.645 19946-19946/com.example.com.appD/dalvikvm: DexOpt: couldn't find field Landroid/os/Message;.sendingUid
09-27 16:11:37.645 19946-19946/com.example.com.appW/dalvikvm: VFY: unable to resolve instance field 135
09-27 16:11:37.645 19946-19946/com.example.com.appD/dalvikvm: VFY: replacing opcode 0x52 at 0x0000

Вот мой класс службы идентификатора экземпляра Firebase

public class FireBase_InstanceID_Service extends FirebaseInstanceIdService {
    public static final String TAG="==Firebase ID===";
    private static final String SubscribeTopic="Chat";
    String refreshedToken;

    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        refreshedToken= FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG,"Here Is Token "+refreshedToken);
        FirebaseMessaging.getInstance().subscribeToTopic(SubscribeTopic);

    }
    private void sendRegistrationToServer(String Token){
        //TODO: Send Token To APP server
    }
}

Вот мой класс службы обмена сообщениями Firebase

 public class FireBase_Messaging_Service extends FirebaseMessagingService {
        public static final String TAG="==FireBase MSG==";

        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            super.onMessageReceived(remoteMessage);
            Log.d(TAG,"From "+remoteMessage.getFrom());

            if (remoteMessage.getData().size()>0){
                Log.d(TAG,"Message Data "+remoteMessage.getData());
            }
            if (remoteMessage.getNotification()!=null){
                Log.d(TAG,"Message Notification Body "+remoteMessage.getNotification().getBody());
            }
            Log.d(TAG,"FCM Message ID "+remoteMessage.getMessageId());
            Log.d(TAG,"FCM Notification Message: "+remoteMessage.getNotification());
            Log.d(TAG,"FCM Data Message "+remoteMessage.getData());
            showNotification(remoteMessage.getNotification().getBody());
        }

        private void showNotification(String Message){
            Intent intent=new Intent(this, UserProfile.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent=PendingIntent.getActivity(this,5,intent,PendingIntent.FLAG_UPDATE_CURRENT);

            NotificationCompat.Builder builder= (NotificationCompat.Builder) new NotificationCompat.Builder (this)
                    .setAutoCancel(true)
                    .setContentTitle("New Notification")
                    .setContentText(Message)
                    .setSmallIcon(R.drawable.common_google_signin_btn_icon_light_normal)
                    .setContentIntent(pendingIntent);

            NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            manager.notify(5,builder.build());

        }
    }

Манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.com.app">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".Navigation_Drawer"
            android:theme="@style/AppTheme">

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


        </activity>

        <service
            android:name=".ImageDownloading"
            android:enabled="true"
            android:exported="false">

        </service>

<!--FIREBASE SERVICES -->

        <service android:name=".FireBase_Messaging_Service">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"></action>
            </intent-filter>
        </service>

        <service android:name=".FireBase_InstanceID_Service">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"></action>
            </intent-filter>
        </service>

 <!--FIREBASE SERVICES -->

    </application>

</manifest>

Поэтому для меня я не могу получать push уведомление в панели уведомлений в фоновом режиме или при закрытии приложения с этими записями в logcat (что я не понимаю)


person androidXP    schedule 27.09.2016    source источник
comment
поделитесь своим файлом манифеста   -  person Adnan Ali    schedule 27.09.2016
comment
@AdnanAli, пожалуйста, проверьте обновленный вопрос   -  person androidXP    schedule 27.09.2016
comment
проверьте эту ссылку. stackoverflow.com/questions/37711082/   -  person Adnan Ali    schedule 27.09.2016
comment
@AdnanAli, я могу обрабатывать уведомление только тогда, когда я получаю его в панели уведомлений, и я не получаю уведомление, когда приложение находится в фоновом режиме или закрыто   -  person androidXP    schedule 27.09.2016
comment
попробуйте Войти в onMessageReceived, чтобы убедиться, что метод не вызывается или уведомление не отображается   -  person Adnan Ali    schedule 27.09.2016
comment
@AdnanAli У меня есть Вход onMessageReceived проверьте класс службы обмена сообщениями Firebase выше   -  person androidXP    schedule 27.09.2016


Ответы (1)


Это работает по назначению, уведомления доставляются в ваш обратный вызов onMessageReceived только тогда, когда ваше приложение находится на переднем плане. Если ваше приложение работает в фоновом режиме или закрыто, то в центре уведомлений отображается сообщение с уведомлением, и любые данные из этого сообщения передаются в намерение, которое запускается в результате нажатия пользователем на уведомление.

Вы можете указать click_action, чтобы указать намерение, которое должно запускаться, когда пользователь нажимает на уведомление. Основное действие используется, если не указано click_action.

Когда намерение запущено, вы можете использовать

getIntent().getExtras();

для получения набора, который будет включать любые данные, отправленные вместе с уведомлением.

Подробнее об уведомлении см. В документации.

person Mohit Trivedi    schedule 27.09.2016
comment
Сначала мне нужно получить уведомление в панели уведомлений, а затем обработать данные. Прочтите вопрос еще раз, я не получаю уведомление, когда приложение закрыто или находится в фоновом режиме - person androidXP; 27.09.2016