Mau*_*dia 2 deep-linking android-intent android-activity firebase firebase-cloud-messaging
我想要什么:我想从Firebase Console发送通知。当应用程序处于后台/终止状态并且用户点击推送通知时,它可以转到特定活动。我们称之为Current Offers Activity。当应用程序处于前台时,应该会发生同样的事情。
我的理解:从firebase docs,当应用程序处于前台时,将从Firebase 控制台发送的推送通知将在类的onMessageReceived方法中接收MyFirebaseMessagingService。但是当应用程序在后台/终止时,不会调用类的onMessageReceived方法MyFirebaseMessagingService。
我想要什么:当应用程序处于后台/终止和用户点击推送通知时,我想将用户重定向到特定活动(当前优惠活动)。
我试过这个答案,但我没有得到解决方案。
我的代码如下。
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());
}
}
Run Code Online (Sandbox Code Playgroud)
MyFirebaseInstanceIDService.java
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);
}
}
Run Code Online (Sandbox Code Playgroud)
ActivityOne.java
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");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
解决方案:
如果您从 firebase 控制台发送推送通知并且您的应用程序在后台或被终止,则不会调用MyFirebaseMessagingService。(firebase 文档中没有提到这一点)
如果您从 firebase 控制台发送推送通知并且您的应用程序在前台,那么MyFirebaseMessagingService将被调用。
如果您从您的服务器发送推送通知(我的意思是后端,即网站或一些基于 Web 的仪表板)并且您的应用程序在后台或终止或在前台,那么MyFirebaseMessagingService将被调用。
小智 5
好吧,我来到这里寻找不同问题的解决方案,但我可以中途回答你的问题。
如果您正在发送带有数据负载的通知,那么您可以检查特定额外内容的意图。例如,如果在您的控制台 (firebase) 中,您有一个键 ('custom_message') 和一些值 ("This is my message"),如下图所示
您可以在启动活动中收听 Intent 的附加内容,可以是启动画面或主要活动。
Intent intent = getIntent();
if (intent.getStringExtras("custom_message") != null) {
//go to specific activity when notification is opened
}
else{
//open open default launch activity
}
Run Code Online (Sandbox Code Playgroud)
现在,之前我说过我会回答你的问题。为什么?这是因为我不知道当通知没有数据有效负载时您将如何实现这一点。希望这可以帮助某人。
@Maulik Dodia 信息也非常有用。赞赏
| 归档时间: |
|
| 查看次数: |
6763 次 |
| 最近记录: |