我对
Android / IOS做了pushnotification.我使用了一个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,{"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,notificationIntent,0); notif.setLatestEventInfo(context,title,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",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); } } }