Firebase 处理推送通知(FCM),而应用程序处于后台/杀死-Android
我想要什么:我想要从Firebase控制台发送通知。当应用程序处于后台/kill时,当用户点击推送通知时,它可以转到特定活动。让我们称之为当前提供活动。同样的事情也应该发生,而应用程序将在前台 我的理解:来自firebase docs,当应用程序位于前台时,将在Firebase 处理推送通知(FCM),而应用程序处于后台/杀死-Android,firebase,android-intent,android-activity,firebase-cloud-messaging,deep-linking,Firebase,Android Intent,Android Activity,Firebase Cloud Messaging,Deep Linking,我想要什么:我想要从Firebase控制台发送通知。当应用程序处于后台/kill时,当用户点击推送通知时,它可以转到特定活动。让我们称之为当前提供活动。同样的事情也应该发生,而应用程序将在前台 我的理解:来自firebase docs,当应用程序位于前台时,将在MyFirebaseMessagingService类的onMessageReceived方法中接收来自firebase控制台的推送通知。但是当应用程序处于后台/kill时,MyFirebaseMessagingService类的onMe
MyFirebaseMessagingService
类的onMessageReceived
方法中接收来自firebase控制台的推送通知。但是当应用程序处于后台/kill时,MyFirebaseMessagingService
类的onMessageReceived
方法将不会被调用
我想要的:当应用程序处于后台/kill&用户点击推送通知时,我想将用户重定向到特定活动(当前提供活动)
我试过了,但没有找到解决办法
我的代码如下
MyFirebaseMessagingService.java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private final String TAG = "mk";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.e(TAG, "Message Body: " + remoteMessage.getNotification().getBody());
}
}
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private final String TAG = "mk";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.e(TAG, "MyFirebaseInstanceIDService Token: " + refreshedToken);
}
}
public class ActivityOne extends AppCompatActivity {
private final String TAG = "mk";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) {
Bundle extras = intent.getExtras();
for (String key : extras.keySet()) {
Log.e(TAG, key + " : " + extras.get(key));
}
}
Log.e(TAG, "Token: " + refreshedToken);
//sendNotificationToPatner();
}
private void sendNotificationToPatner() {
Log.e(TAG, "in sendNotificationToPatner: ");
SendNotificationModel sendNotificationModel = new SendNotificationModel("check", "i miss you");
RequestNotificaton requestNotificaton = new RequestNotificaton();
requestNotificaton.setSendNotificationModel(sendNotificationModel);
requestNotificaton.setToken("cJ-y3b3mnYk:APA91bEYTp1LtfpMHp-wdvKkq1_dVYF4DXl1SHWIaw0guwPSoTyFtbcJjPPB6GhP0FuRd9ybJ--BM6W3aFB-2-3KpVOBDITX91QV4kH1lAgxsIxHcfaj5FQLOIZ0t_HDC2bd8hqJrH-F4x_wuunJfYzanAagm4xcaA");
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendChatNotification(requestNotificaton);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d(TAG, "in onResponse");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
Log.d(TAG, "in onFailure");
}
});
}
}
myFirebaseInstancedService.java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private final String TAG = "mk";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.e(TAG, "Message Body: " + remoteMessage.getNotification().getBody());
}
}
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private final String TAG = "mk";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.e(TAG, "MyFirebaseInstanceIDService Token: " + refreshedToken);
}
}
public class ActivityOne extends AppCompatActivity {
private final String TAG = "mk";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) {
Bundle extras = intent.getExtras();
for (String key : extras.keySet()) {
Log.e(TAG, key + " : " + extras.get(key));
}
}
Log.e(TAG, "Token: " + refreshedToken);
//sendNotificationToPatner();
}
private void sendNotificationToPatner() {
Log.e(TAG, "in sendNotificationToPatner: ");
SendNotificationModel sendNotificationModel = new SendNotificationModel("check", "i miss you");
RequestNotificaton requestNotificaton = new RequestNotificaton();
requestNotificaton.setSendNotificationModel(sendNotificationModel);
requestNotificaton.setToken("cJ-y3b3mnYk:APA91bEYTp1LtfpMHp-wdvKkq1_dVYF4DXl1SHWIaw0guwPSoTyFtbcJjPPB6GhP0FuRd9ybJ--BM6W3aFB-2-3KpVOBDITX91QV4kH1lAgxsIxHcfaj5FQLOIZ0t_HDC2bd8hqJrH-F4x_wuunJfYzanAagm4xcaA");
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendChatNotification(requestNotificaton);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d(TAG, "in onResponse");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
Log.d(TAG, "in onFailure");
}
});
}
}
ActivityOne.java
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private final String TAG = "mk";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.e(TAG, "Message Body: " + remoteMessage.getNotification().getBody());
}
}
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private final String TAG = "mk";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.e(TAG, "MyFirebaseInstanceIDService Token: " + refreshedToken);
}
}
public class ActivityOne extends AppCompatActivity {
private final String TAG = "mk";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) {
Bundle extras = intent.getExtras();
for (String key : extras.keySet()) {
Log.e(TAG, key + " : " + extras.get(key));
}
}
Log.e(TAG, "Token: " + refreshedToken);
//sendNotificationToPatner();
}
private void sendNotificationToPatner() {
Log.e(TAG, "in sendNotificationToPatner: ");
SendNotificationModel sendNotificationModel = new SendNotificationModel("check", "i miss you");
RequestNotificaton requestNotificaton = new RequestNotificaton();
requestNotificaton.setSendNotificationModel(sendNotificationModel);
requestNotificaton.setToken("cJ-y3b3mnYk:APA91bEYTp1LtfpMHp-wdvKkq1_dVYF4DXl1SHWIaw0guwPSoTyFtbcJjPPB6GhP0FuRd9ybJ--BM6W3aFB-2-3KpVOBDITX91QV4kH1lAgxsIxHcfaj5FQLOIZ0t_HDC2bd8hqJrH-F4x_wuunJfYzanAagm4xcaA");
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendChatNotification(requestNotificaton);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d(TAG, "in onResponse");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
Log.d(TAG, "in onFailure");
}
});
}
}
公共类活动One扩展了AppCompative活动{
私有最终字符串TAG=“mk”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
字符串refreshedToken=FirebaseInstanceId.getInstance().getToken();
Intent=getIntent();
if(intent!=null&&intent.getExtras()!=null){
Bundle extras=intent.getExtras();
for(字符串键:extras.keySet()){
Log.e(标记,key+”:“+extras.get(key));
}
}
Log.e(标记“Token:+refreshedToken”);
//sendNotificationToPatner();
}
私有void sendNotificationToPatner(){
Log.e(标记“in sendNotificationToPatner:”);
SendNotificationModel SendNotificationModel=新建SendNotificationModel(“检查”,“我想你”);
RequestNotificaton RequestNotificaton=新RequestNotificaton();
RequestNotificationon.setSendNotificationModel(sendNotificationModel);
RequestNotificationon.setToken(“cJ-y3b3mnYk:APA91bEYTp1LtfpMHp-wdvKkq1_dVYF4DXl1SHWIaw0guwPSoTyFtbcJjPPB6GhP0FuRd9ybJ--BM6W3aFB-2-3KPOBDITx91QV4KH1LAGXSIXHCFAJ5FQLOIZ0T_HDC2bd8hqJrH-F4xèWungfyzanaaGM4xCAA”);
ApiInterface apiService=ApiClient.getClient().create(ApiInterface.class);
2.Call responseBodyCall=apiService.sendChatNotification(requestNotificaton);
enqueue(新的回调函数(){
@凌驾
公共无效响应(改装2.呼叫,改装2.响应){
Log.d(标签“in onResponse”);
}
@凌驾
公共失效失效失效(改型2.Call,可丢弃t){
Log.d(标签“in onFailure”);
}
});
}
}
提前感谢。解决方案:
嗯,我来这里是想找到一个不同问题的解决方案,但我可以半途而废地回答你的问题 如果您正在发送带有数据负载的通知,那么您可以检查特定额外内容的意图。例如,如果在您的控制台(firebase)中有一个带有某个值(“这是我的消息”)的键(“自定义消息”),如下图所示 您可以在您的启动活动中收听Intent的附加节目,可以是splashscreen或mainactivity
Intent intent = getIntent();
if (intent.getStringExtras("custom_message") != null) {
//go to specific activity when notification is opened
}
else{
//open open default launch activity
}
现在,我早些时候说过我会半回答你的问题。为什么?这是因为我不知道当通知没有数据负载时,您将如何实现这一点。希望这能帮助别人
@Maulik Dodia信息也非常有用。感谢您可以根据应用程序状态检查数据的准确行为和来自FCM的纯通知。让我检查一下,尽管我已经检查过了。可能是我错过了什么。如果你能在这里的评论中指出我遗漏的东西,对其他开发人员也会更好。@Rakesh