Phonegap PushNotification 打开特定应用页面 [英] Phonegap PushNotification to open a specific app page
问题描述
我正在为 Android/IOS 做推送通知.我使用了 phonegap 推送插件 https://github.com/phonegap-build/PushPlugin,看起来效果很好.
I am doing pushnotification for both Android/IOS.I have used a phonegap push-plugin https://github.com/phonegap-build/PushPlugin, it seems to work great.
我现在在我的设备上接收消息,问题是当我点击收到的消息时,它会转到应用程序 index.html 页面.但是我想在我点击消息和主页时打开其他页面,例如 home.html.html 我将显示消息.
I am receiving message on my device now the problem is When i click on the received message it goes to app index.html page.But i want to open someother page eg home.html when i clicked the message and in home.html i will be showing the message.
如何实现这一目标?
MyPhoneGapActivity.java
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.
";
txt+="Error description: " + err.message + "
";
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>
推荐答案
您可以轻松实现这一点,
You can easily accomplish this,
第 1 步:打开您的 GCMIntentService.java 文件
Step 1 : Open your GCMIntentService.java file
检查方法 onMessage
Check for the method onMessage
在那个方法中,你会发现从这里他们将意图传递给你的 MyPhoneGapActivity.java ......现在你要做的是传递一些额外的信息......向意图传递一些额外的信息
in that method you will find from here they are passing the intent to your MyPhoneGapActivity.java ...Now what you have to do is you pass some extra information.... Passing some extra information to the intent
检查这条线
Intent notificationIntent = new Intent(context, MyPhoneGapActivity.class);
//here you pass the information
notificationIntent.putExtra ("url",url);
你能在上面看到我传递了额外的信息 url ...完整的代码见下面
Can you see above i have passed extra information url ...for the complete code see below
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 中
In your 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 文件:-)
Thats it now when you click the notification it will load the home.html file:-)
这篇关于Phonegap PushNotification 打开特定应用页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!