Телефонная кнопка PushNotification для открытия отдельной страницы приложения

Я делаю pushnotification как для Android, так и для IOS. Я использовал push-плагин phonegap https://github.com/phonegap-build/PushPlugin , он работает отлично.

Я получаю сообщение на своем устройстве, теперь проблема заключается в том, что когда я нажимаю на полученное сообщение, оно переходит на страницу приложения index.html. Но я хочу открыть другую страницу, например home.html, когда я нажал сообщение и в home.html я буду Показывать сообщение.

Как достичь этого?

MyPhoneGapActivity.java

package com.test; import org.apache.cordova.DroidGap; import android.os.Bundle; public class MyPhoneGapActivity extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setIntegerProperty("splashscreen", R.drawable.splash); super.setIntegerProperty("loadUrlTimeoutValue", 60000); super.loadUrl("file:///android_asset/www/index.html", 10000); } } 

index.js

 <script type="text/javascript"> var pushNotification; function onDeviceReady() { $("#app-status-ul").append('<li>deviceready event received</li>'); document.addEventListener("backbutton", function(e) { $("#app-status-ul").append('<li>backbutton event received</li>'); if( $("#home").length > 0) { // call this to get a new token each time. don't call it to reuse existing token. //pushNotification.unregister(successHandler, errorHandler); e.preventDefault(); navigator.app.exitApp(); } else { navigator.app.backHistory(); } }, false); try { pushNotification = window.plugins.pushNotification; if (device.platform == 'android' || device.platform == 'Android') { $("#app-status-ul").append('<li>registering android</li>'); pushNotification.register(successHandler, errorHandler, {"senderID":"661780372179","ecb":"onNotificationGCM"}); // required! } else { $("#app-status-ul").append('<li>registering iOS</li>'); pushNotification.register(tokenHandler, errorHandler, {"badge":"true","sound":"true","alert":"true","ecb":"onNotificationAPN"}); // required! } } catch(err) { txt="There was an error on this page.\n\n"; txt+="Error description: " + err.message + "\n\n"; alert(txt); } } // handle APNS notifications for iOS function onNotificationAPN(e) { if (e.alert) { $("#app-status-ul").append('<li>push-notification: ' + e.alert + '</li>'); navigator.notification.alert(e.alert); } if (e.sound) { var snd = new Media(e.sound); snd.play(); } if (e.badge) { pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge); } } // handle GCM notifications for Android function onNotificationGCM(e) { $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>'); switch( e.event ) { case 'registered': if ( e.regid.length > 0 ) { $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>"); // Your GCM push server needs to know the regID before it can push to this device // here is where you might want to send it the regID for later use. console.log("regID = " + e.regID); } break; case 'message': // if this flag is set, this notification happened while we were in the foreground. // you might want to play a sound to get the user's attention, throw up a dialog, etc. if (e.foreground) { $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>'); // if the notification contains a soundname, play it. var my_media = new Media("/android_asset/www/"+e.soundname); my_media.play(); } else { // otherwise we were launched because the user touched a notification in the notification tray. if (e.coldstart) $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>'); else $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>'); } $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>'); $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>'); break; case 'error': $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>'); break; default: $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>'); break; } } function tokenHandler (result) { $("#app-status-ul").append('<li>token: '+ result +'</li>'); // Your iOS push server needs to know the token before it can push to this device // here is where you might want to send it the token for later use. } function successHandler (result) { $("#app-status-ul").append('<li>success:'+ result +'</li>'); } function errorHandler (error) { $("#app-status-ul").append('<li>error:'+ error +'</li>'); } document.addEventListener('deviceready', onDeviceReady, true); </script> 

Вы можете легко выполнить это,

Шаг 1. Откройте файл GCMIntentService.java.

Проверьте метод onMessage

В этом методе вы найдете здесь, что они передают намерение вашему MyPhoneGapActivity.java … Теперь вам нужно предоставить дополнительную информацию … Передача дополнительной информации о намерениях

Проверьте эту строку

 Intent notificationIntent = new Intent(context, MyPhoneGapActivity.class); //here you pass the information notificationIntent.putExtra ("url",url); 

Вы можете видеть выше, я передал дополнительную информацию url … для полного кода, см. Ниже

  protected void onMessage(Context context, Intent intent) { Log.d(TAG, "onMessage - context: " + context); // Extract the payload from the message Bundle extras = intent.getExtras(); if (extras != null) { boolean foreground = this.isInForeground(); extras.putBoolean("foreground", foreground); if (foreground){ PushHandlerActivity.sendToApp(extras); }else{ String message = extras.getString("message"); String title = extras.getString("title"); Notification notif = new Notification(android.R.drawable.btn_star_big_on, message, System.currentTimeMillis() ); notif.flags = Notification.FLAG_AUTO_CANCEL; notif.defaults |= Notification.DEFAULT_SOUND; notif.defaults |= Notification.DEFAULT_VIBRATE; String url = "notify"; Intent notificationIntent = new Intent(context, MyPhoneGapActivity.class); //here you pass the information notificationIntent.putExtra ("url",url); notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notif.setLatestEventInfo(context, title, message, contentIntent); String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); mNotificationManager.notify(1, notif); } } } 

Шаг 2:

В MyPhoneGapActivity.java

 package com.test; import org.apache.cordova.DroidGap; import android.os.Bundle; public class MyPhoneGapActivity extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setIntegerProperty("splashscreen", R.drawable.splash); super.setIntegerProperty("loadUrlTimeoutValue", 60000); Bundle extras = getIntent().getExtras(); String message = extras.getString("url"); if(message == "notify"){ super.loadUrl("file:///android_asset/www/home.html", 10000); }else{ super.loadUrl("file:///android_asset/www/index.html", 10000); } } } 

Вот теперь, когда вы нажмете уведомление, он загрузит файл home.html 🙂

Я никогда раньше не использовал этот плагин, но похоже, что он передает message в уведомлении, которое вы можете обрабатывать в своем приложении. Похоже, что в вашем index.html вы можете прочитать это сообщение, и если оно содержит некоторую определенную строку, перенаправляйте на main.html или туда, куда вы хотите пойти. Вы могли бы сделать это, пока экран всплеска все еще будет виден или что-то, чтобы пользователь не видел перенаправление страницы jarring.

Я столкнулся с такой же проблемой после некоторых исследований, наконец, получил решение, если у кого-то есть одна и та же проблема. Пожалуйста, следуйте этой ссылке

https://github.com/phonegap-build/PushPlugin/issues/213