Phonegap PushNotification pour ouvrir une page de l'application
Je suis en train de faire pushnotification pour les deux Android/IOS.J'ai utilisé un phonegap push-plugin https://github.com/phonegap-build/PushPlugin, il semble fonctionner à merveille.
Je reçois un message sur mon appareil, maintenant, le problème est Quand je clique sur le message reçu, il va à l'app index.html page.Mais je veux ouvrir someother page par exemple home.html quand j'ai cliqué sur le message, et home.html je serai en affichant le message.
Comment faire?
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>
OriginalL'auteur Iam4fun | 2013-05-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez facilement faire cela,
Étape 1 : Ouvrez votre GCMIntentService.java fichier
Vérifier la méthode onMessage
dans cette méthode, vous trouverez à partir d'ici, ils sont de passage de l'intention à votre MyPhoneGapActivity.java ...Maintenant que vous avez à faire est de vous transmettre quelques informations supplémentaires....
En passant quelques informations supplémentaires à l'intention
Vérifier cette ligne
Vous pouvez le voir ci-dessus, j'ai passé des informations supplémentaires url ...pour le code complet voir ci-dessous
Étape 2:
Dans votre MyPhoneGapActivity.java
C'est maintenant lorsque vous cliquez sur la notification qu'il va charger le home.html fichier:-)
chaque chose que je suis en train d'écrire dans cette activité principale de la classe est en train de disparaître après chaque cordova construire. que dois-je faire pour garder mon évolution?
Vraiment utile qui a été. Un problème est que, lorsque la condition est satisfaite
if(message == "notify")
l'écran devient blanc après l'écran de démarrage. Une chose à remarquer est, dans le faux état il va bien.Est-il un moyen de faire cela est de la pure javascript? Peut-être un délai d'attente et la fenêtre.emplacement.assign('/foo/bar")?
Il serait plus simple et plus flexible pour ajouter l'url de hachage pour la launchUrl, par exemple,
file:///android_asset/www/index.html#custompage
ou certains paramètres, par exemplefile:///android_asset/www/index.html?page=custom
. Il n'est pas nécessaire pourhome.html
. Suffit d'utiliser le javascript pour le processus dewindow.location.hash
ou les paramètres de l'url lorsque votre appareil est prêt.OriginalL'auteur sdg
Je n'ai jamais utilisé ce plugin avant, mais il semble comme il se passe un
message
dans la notification que vous pouvez traiter votre demande. Il semble donc que, dans votreindex.html
vous avez pu lire ce message et s'il contient une certaine chaîne de caractères, rediriger versmain.html
ou partout où vous voulez aller. Vous pouvez le faire tout en un écran de démarrage est toujours visible ou quelque chose, de sorte que l'utilisateur ne voit pas un cognement de la page de redirection.Peux-tu montrer ton code?
OriginalL'auteur MBillau
Je suis face à un même problème après quelques recherches, a finalement Obtenu Ma Solution, Si quelqu'un a le Même Problème .Suivez ces lien
https://github.com/phonegap-build/PushPlugin/issues/213
OriginalL'auteur Neotrixs