Как исправить уведомление, которое не отображается при запуске приложения - PullRequest
0 голосов
/ 01 апреля 2019

Я сделал тестовое приложение, в котором реализован Firebase, я использую композитор уведомлений из Firebase, он работает нормально, но не так, как задумано, так как уведомление отображается только тогда, когда приложение не активно (на экране), и яон должен отображаться, даже когда приложение активно и работает

MainActivity.java

package com.gci.gestioncapteursincendie;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= findViewById(R.id.textViewToken);
        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                      if(task.isSuccessful()){
                          String token = task.getResult().getToken();
                          System.out.println("token:"+token);
                          textView.setText("Token : " + token);
                        }
                        else
                      {
                          textView.setText("Token Not Generated");
                      }
                    }
                });
    }

}

AndroidManifest.xml

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

    <!-- Granting Internet access permission to app -->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:name="com.gci.gestioncapteursincendie.FirebaseActivity"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service
            android:name=".FirebaseMessagingServiceExtended"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Редактировать: добавлен манифест

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Когда приложение закрыто, ваши уведомления обрабатываются процессом Службы Google, который заботится о том, чтобы отображать ваши уведомления по мере необходимости, включая действие по умолчанию, щелкающее (открытие приложения) и значок уведомления.

Когда приложение находится на переднем плане, полученные сообщения обрабатываются приложением, и, поскольку нет логики для его обработки, ничего не произойдет!

Вы можете создать пользовательский FirebaseMessagingService, который реализует onMessageReceived изатем создайте в нем уведомление ..

public class NotificationService extends FirebaseMessagingService { 
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Notification notification = new NotificationCompat.Builder(this)
     .setContentTitle(remoteMessage.getNotification().getTitle())
     .setContentText(remoteMessage.getNotification().getBody())
     .setSmallIcon(R.mipmap.ic_launcher)
     .build();

    NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
    manager.notify(some_int_number (eg : 123), notification);
   }
 }

И добавьте это в свой файл манифеста *1011*

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

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

0 голосов
/ 01 апреля 2019

Вы должны установить для show_in_foreground значение Ture в объекте, который вы отправляете в SDK.

                 const objNotification = {
                    title: ‘xxxxxx’,
                    body: ‘xxxxx’,
                    sound: 'default',
                    priority: 'high',
                    show_in_foreground: true,
                  };
                  const myMessage = JSON.stringify(objNotification);

                  let message;

                    message = {
                      notification: {
                        title: ‘xxxxxx’,
                        body: `xxxxx`,
                      },
                      data: {
                        custom_notification: myMessage,
                      },
                      token: registrationToken,
                    };

                    admin.messaging().send(message)
                      .then((response) => {
                        res.status(200).send({ success: true, result: response, });
                      })
                      .catch((error) => {
                        console.log('Error sending message:', error);
                        res.status(400).send({ success: false, result: error });
                      });
...