Php 收到推送通知时,在jqm应用程序中打开详细信息页面
我正在用Cordova构建一个jquery移动应用程序。我已经尝试使用正常工作的推送通知,我通过一个php curl脚本发送消息。我的问题是,当推送通知到来,用户点击通知托盘中的消息时,我希望应用程序重定向到一个名为Php 收到推送通知时,在jqm应用程序中打开详细信息页面,php,android,cordova,jquery-mobile,curl,Php,Android,Cordova,Jquery Mobile,Curl,我正在用Cordova构建一个jquery移动应用程序。我已经尝试使用正常工作的推送通知,我通过一个php curl脚本发送消息。我的问题是,当推送通知到来,用户点击通知托盘中的消息时,我希望应用程序重定向到一个名为详细信息的特定页面,但我不知道如何实现它。 使用我的当前脚本,当用户点击通知时,它会打开应用程序的索引页 带javascript的HTML <!DOCTYPE HTML> <html> <head> <title>
详细信息
的特定页面,但我不知道如何实现它。
使用我的当前脚本,当用户点击通知时,它会打开应用程序的索引页
带javascript的HTML
<!DOCTYPE HTML>
<html>
<head>
<title>com.PhoneGap.c2dm</title>
</head>
<body>
<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;
$("#app-status-ul").append('<li>registering ' + device.platform + '</li>');
if (device.platform == 'android' || device.platform == 'Android' ||
device.platform == 'amazon-fireos' ) {
pushNotification.register(successHandler, errorHandler, {"senderID":"66178037****","ecb":"onNotification"}); // required!
} else {
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>');
// showing an alert also requires the org.apache.cordova.dialogs plugin
navigator.notification.alert(e.alert);
}
if (e.sound) {
// playing a sound also requires the org.apache.cordova.media plugin
var snd = new Media(e.sound);
snd.play();
}
if (e.badge) {
pushNotification.setApplicationIconBadgeNumber(successHandler, e.badge);
}
}
// handle GCM notifications for Android
function onNotification(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>');
// on Android soundname is outside the payload.
// On Amazon FireOS all custom attributes are contained within payload
var soundfile = e.soundname || e.payload.sound;
// if the notification contains a soundname, play it.
// playing a sound also requires the org.apache.cordova.media plugin
var my_media = new Media("/android_asset/www/"+ soundfile);
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>');
//android only
$("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
//amazon-fireos only
$("#app-status-ul").append('<li>MESSAGE -> TIMESTAMP: ' + e.payload.timeStamp + '</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>
<div id="home">
<div id="app-status-div">
<ul id="app-status-ul">
<li>Cordova PushNotification Plugin Demo</li>
</ul>
</div>
<br>
<div id="detail" data-role="page">
<div data-role="header"></div>
<div data-role="content">Hello this is the detail page</div>
<div data-role="footer"></div>
</div>
</div>
</body>
</html>
com.PhoneGap.c2dm
通知;
函数ondevicerady(){
$(“#应用程序状态ul”).append(“收到设备日常事件” ”);
文件.添加的文件列表器(“backbutton”,函数(e)
{
$(“#应用程序状态ul”).append(“接收到backbutton事件” ”);
如果($(“#home”).length>0)
{
//每次调用此以获取新令牌。不要调用它以重用现有令牌。
//取消注册(successHandler,errorHandler);
e、 预防默认值();
navigator.app.exitApp();
}
其他的
{
navigator.app.backHistory();
}
},假);
尝试
{
pushNotification=window.plugins.pushNotification;
$(“#应用程序状态ul”).append(“注册”+device.platform+” );
如果(device.platform=='android'| | device.platform=='android'||
device.platform==“amazon fireos”){
register(successHandler,errorHandler,{“senderID”:“66178037****”,“ecb”:“onNotification”});//必需!
}否则{
注册(tokenHandler,errorHandler,{“badge”:“true”,“sound”:“true”,“alert”:“true”,“ecb”:“onNotificationAPN”});//必需!
}
}
捕捉(错误)
{
txt=“此页面上有错误。\n\n”;
txt+=“错误描述:”+err.message+“\n\n”;
警报(txt);
}
}
//处理iOS的APNS通知
通知APN(e)的功能{
如果(如警报){
$(“#应用程序状态ul”).append(“推送通知:”+e.alert+“ ”);
//显示警报还需要org.apache.cordova.dialogs插件
navigator.notification.alert(e.alert);
}
如果(如声音){
//播放声音还需要org.apache.cordova.media插件
var snd=新媒体(如声音);
snd.play();
}
如果(如徽章){
pushNotification.setApplicationBadgeNumber(successHandler,e.badge);
}
}
//处理Android的GCM通知
通知功能(e){
$(“#应用程序状态ul”).append(“事件->接收:“+e.EVENT+” ”);
开关(如事件)
{
“已登记”案件:
如果(e.regid.length>0)
{
$(“#应用程序状态ul”)。附加(“已注册->REGID:”+e.REGID+“ ”);
//您的GCM推送服务器需要知道regID才能推送到此设备
//这里是您可能希望发送regID供以后使用的地方。
console.log(“regID=“+e.regID”);
}
打破
案例“信息”:
//如果设置了此标志,则此通知发生在我们在前台时。
//你可能想要播放一个声音来引起用户的注意,弹出一个对话框,等等。
如果(如前景)
{
$(“#应用程序状态ul”).append('--内联通知--'+' ');
//在Android上,soundname不在有效负载范围内。
//在Amazon FireOS上,所有自定义属性都包含在有效负载中
var soundfile=e.soundname | | e.payload.sound;
//如果通知包含声音名称,请播放它。
//播放声音还需要org.apache.cordova.media插件
var my_media=新媒体(“/android_资产/www/”+声音文件);
我的媒体播放();
}
其他的
{//否则,我们将启动,因为用户触摸了通知托盘中的通知。
如果(如coldstart)
$(“#应用程序状态ul”).append(“--COLDSTART通知--”+” );
其他的
$(“#应用程序状态ul”).append('--后台通知--'+' ');
}
$(“#应用程序状态ul”).append(“消息->消息:”+e.payload.MESSAGE+” );
//仅限android
$(“#应用程序状态ul”).append(“消息->MSGCNT:”+e.payload.MSGCNT+” );
//仅亚马逊fireos
$(“#应用程序状态ul”).append(“消息->时间戳:”+e.payload.TIMESTAMP+” );
打破
案例“错误”:
$(“#应用程序状态ul”)
<?php
// Replace with the real server API key from Google APIs
$apiKey = "AIzaSyDn9RPYmnlbs9EOvExxZWH*****klOqxM";
// Replace with the real client registration IDs
$registrationIDs = array("APA91bHhTiGeAKgphENoJQ6fz1H2eKGMxuBlw9PspLCPAiprTSDN6mRuW3k253PZyppxgJaqPftTzYZOiWPt5C4XFVmkuqjbXp7MV3mAmpDAYM-11LdIdU0");
// Message to be sent
$message = "How to draw closer to God";
// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registrationIDs,
'data' => array( "message" => $message,"title" => "Today's Morning Devotion"),
);
$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
// Open connection
$ch = curl_init();
// Set the URL, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, $url);
curl_setopt( $ch, CURLOPT_POST, true);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $fields));
// Execute post
$result = curl_exec($ch);
// Close connection
curl_close($ch);
echo $result;
//print_r($result);
//var_dump($result);
?>