特定のアクティビティのUI変更については、onMessageReceived()
に直接コードを書くことは避けてください。地元の放送受信機を介してチャンネルを送信できます。
onMessageReceived()
に直接コードを書く傾向がある場合は、FirebaseMessagingService
クラスが混乱するでしょう。たとえば、4種類の通知データがあり、それぞれのデータが異なる活動を呼び出す場合などです。あなたのコードは次のようになります:
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
if(remoteMessage.getData() != null
&& remoteMessage.getData().containsKey("notification_type")){
switch(remoteMessage.getData().containsKey("notification_type")){
case "type1":
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
//Access UI for some activity
.
.
.
});
break;
case "type2":
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
//Access UI for some activity
.
.
.
});
break;
case "type3":
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
//Access UI for some activity
.
.
.
});
break;
case "type4":
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
//Access UI for some activity
.
.
.
});
break;
}
}
}
また、ローカルブロードキャストを使用すると、コードはモジュール化され、整理されます。
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
if(remoteMessage.getData() != null
&& remoteMessage.getData().containsKey("notification_type")){
Intent intent = new Intent();
intent.putExtra("body",messageBody); // Put info that you want to send to the activity
switch(remoteMessage.getData().containsKey("notification_type")){
case "type1":
intent.setAction("ACTION_1") // For activity1
break;
case "type2":
intent.setAction("ACTION_2") //For activity2
break;
case "type3":
intent.setAction("ACTION_3") //For activity3
break;
case "type4":
intent.setAction("ACTION_4") //For activity4
break;
}
sendBroadcast(intent);
}
}
そして、あなたの活動(例えばactivity1)次のようになります:あなたのコードは次のようになります プライベートBroadcastReceiver mReceiverを。
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
IntentFilter intentFilter = new IntentFilter(
"ACTION_1"); // Put appropriate action string
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Get message from intent
String msg_for_me = intent.getStringExtra("some_msg");
//Do your UI Changes stuff here.
}
};
//registering our receiver
this.registerReceiver(mReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
this.unregisterReceiver(this.mReceiver);//unregister receiver
}
私によれば、これはアクティビティ自体の内部でのUI変更をコード化し、より良いコード管理につなげるのに役立ちます。
希望します。
受信したメッセージでローカルブロードキャストをアクティビティに送信し、そこに変更を加えることができます。 –