如何从Firebase推送通知中获取数据并将其显示在Android活动中?

时间:2016-06-03 07:01:56

标签: java android

抱歉这个noob问题,我是android开发的新手。我目前正在开发一个项目,需要向安装了我的应用程序的Android设备发送推送通知。我已经按照firebase的快速入门教程完成了这项工作,并在我的设备上成功收到了通知。

问题:如何检索服务器发送的消息并将该消息显示给我的Android Activity?提前谢谢。

继承我的代码。的 MainActivity.java

public class MainActivity extends AppCompatActivity {
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView tv = (TextView) findViewById(R.id.tv);

    /*
    * Get the data from push notification and display it in TextView
    * */

    tv.setText("Message retrieve from Push Notification");

}

这是我的 MyFirebaseMessagingService.java

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    sendNotification(remoteMessage.getNotification().getBody());
}

//This method is only generating push notification
//It is same as we did in earlier posts
public void sendNotification(String messageBody) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.putExtra("message", messageBody);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
            Intent.FLAG_ACTIVITY_SINGLE_TOP);
    Uri defaultSoundUri =  RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Peoplelink Push Notification")
            .setContentText(messageBody)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

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

    notificationManager.notify(0, notificationBuilder.build());
}

2 个答案:

答案 0 :(得分:2)

如果您想为您的Android活动发送消息,请使用FirebaseMessagingService。您可以使用EventBus。 android优化事件总线que简化了活动,片段,线程,服务等之间的通信。减少代码,提高质量。

将EventBus添加到build.gradle文件

compile 'org.greenrobot:eventbus:3.0.0'

注册 MainActivity.java 并创建onMessageEvent方法。

public class MainActivity extends AppCompatActivity {

TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView) findViewById(R.id.tv);

    EventBus.getDefault().register(this);
}

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(String message) {
    textView.setText(message);
};

MyFirebaseMessagingService.java

中使用EventBus.getDefault().post()
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    EventBus.getDefault().post(remoteMessage.getNotification().getBody());
}

答案 1 :(得分:1)

如果您想发送一些其他消息(通知时显示的消息除外),您可以在高级选项 - >下的字段中设置消息。 firebase控制台上的自定义数据

例如,将消息作为键,将消息值作为值。

投入后,数据将被发送到设备,并通过意图附加内容传递给您在通知意图中设置的活动。

因此,要获取数据,请在活动onCreate:

上添加此代码
Bundle extras = getIntent().getExtras();
if (extras != null) {
    tv.setText(extras.getString("message", "empty message"));
}

如果设置正确,将显示该消息。