关闭应用程序时如何向Android发送推送通知

时间:2018-08-17 12:31:48

标签: android firebase firebase-cloud-messaging

我有一个小型应用程序,当我在后台运行该应用程序时,我可以从 Firabase云消息传递接收消息。我对此进行了大量搜索,但在应用关闭时如何在android中接收/创建通知找不到正确的答案,因此请不要以为这是一个重复的问题。有人可以告诉我一个有关此事及其完成方式的例子吗?

这是我的Firebase消息服务类

    public class MyFirebaseMessagingService extends FirebaseMessagingService {

    public static final String tag = "TAG";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        Log.d(tag,"FROM"+remoteMessage.getFrom());

        //check if message contains data
        if(remoteMessage.getData().size()>0){
            Log.d(tag,"Message Data" + remoteMessage.getData());
        }

        //check if message constains notification
        if(remoteMessage.getNotification() != null){
            sendNotification(remoteMessage.getNotification().getBody());
        }
    }

    private void sendNotification(String body){

        Intent i = new Intent(this,MainActivity.class);

        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Firebase CLoud Messaging")
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);


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


}

这是我的清单

<application
        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">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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


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

    </application>

2 个答案:

答案 0 :(得分:1)

根据the docs,您可以通过FCM发送两种类型的通知。

  1. 通知消息
  2. 数据消息

firebase控制台只能发送第一类消息。如果您的应用程序位于背景中,则通知消息将由系统处理,但是如果您的应用程序已停止,则通知消息将不起作用。

切换到您自己的API,然后发送数据消息。

答案 1 :(得分:1)

因此,在经历了几个小时的问题并在 @Mauker 的帮助下,我终于做到了。这些是我采取的步骤以及从互联网上收到的所有信息。

首先,忘记将Firebase Cloud Message发送通知到您的移动应用程序。  再用邮递员来做那些动作。

通知有两种类型,一种是所有人都可以同时收到该通知的组通知,另一种是通知本身仅供用户查看的直接通知。

1º如果要组通知,则必须在应用程序启动程序类中执行以下操作:

 FirebaseMessaging.getInstance().subscribeToTopic("groupNameChoosenByYou");

2º然后您必须创建一个类来处理此问题

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Map<String, String> data = remoteMessage.getData();
        String myCustomKey = data.get("title"); //received from postman POST as you can see above
        Intent i = new Intent(this,MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_ONE_SHOT);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(myCustomKey)
                .setContentText(myCustomKey+myCustomKey)
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);
        NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(0,notificationBuilder.build());
    }
}

3º去邮递员那里做

这应该是您的网址: https://fcm.googleapis.com/fcm/send

{
               "to":"/topics/groupNameChoosenByYou", 
               "data":
               {
                  "title":"Your title",
                  "message":"Your message"
               }
            }

4º在邮递员中时,请在标题中执行

 Authorization -> Project settings in Firebase -> Cloud Messaging and take the Server key
 Content-type -> application/json

5º如果您想为某些特定用户进行直接通知 "to":"/topics/groupNameChoosenByYou",替换为在与Firebase的第一次连接中生成的设备令牌ID(在安装应用程序时)

6º如果要在应用程序关闭时发送通知,除了facebook,whatsapp(黄金应用程序)等某些ROM不允许这样做,您必须进行电池优化并将您的应用程序放在<强>受保护的应用(这会因品牌而异)。理想的方法是给用户一个初始弹出窗口,以帮助他做到这一点。

这是我学到的,对我有用。上面的任何问题,在获得更多信息时,我都会尝试进行更多研究并进行更新。