使用 IOs-PushPlugin Cordova 2.5 进行首次推送

Posted

技术标签:

【中文标题】使用 IOs-PushPlugin Cordova 2.5 进行首次推送【英文标题】:First Push with IOs-PushPlugin Cordova 2.5 【发布时间】:2013-05-02 10:03:56 【问题描述】:

我尝试从 Holly Schinsky 那里完成本教程 http://devgirl.org/2012/10/19/tutorial-apple-push-notifications-with-phonegap-part-1/

插件已安装,我正在尝试第一次推送

在我的 index.html 中,我从我的 src index.js 调用函数 app.initialize()

这就是,在我的 index.js 中:

var app = 

initialize: function() 
this.bindEvents();
,

bindEvents: function() 
document.addEventListener('deviceready', this.onDeviceReady, false);
,

onDeviceReady: function() 
app.receivedEvent('deviceready');
,
tokenHandler:function(msg) 
console.log("Token Handler " + msg);
,
errorHandler:function(error) 
console.log("Error Handler  " + error);
alert(error);
,

successHandler: function(result) 
alert('Success! Result = '+result)
,

receivedEvent: function(id) 
var pushNotification = window.plugins.pushNotification;
// TODO: Enter your own GCM Sender ID in the register call for android
if (device.platform == 'android' || device.platform == 'Android') 
    pushNotification.register(this.successHandler, this.errorHandler,    "senderID":"554205989074","ecb":"app.onNotificationGCM");

else 
    pushNotification.register(this.tokenHandler,this.errorHandler,"badge":"true","sound":"true","alert":"true","ecb":"app.onNotificationAPN");

var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');

listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');

console.log('Received Event: ' + id);
,
// ios
onNotificationAPN: function(event) 
var pushNotification = window.plugins.pushNotification;
console.log("Received a notification! " + event.alert);
console.log("event sound " + event.sound);
console.log("event badge " + event.badge);
console.log("event " + event);
if (event.alert) 
    navigator.notification.alert(event.alert);

if (event.badge) 
    console.log("Set badge on  " + pushNotification);
    pushNotification.setApplicationIconBadgeNumber(this.successHandler, event.badge);

if (event.sound) 
    var snd = new Media(event.sound);
    snd.play();

,
// Android
onNotificationGCM: function(e) 
switch( e.event )

    case 'registered':
        if ( e.regid.length > 0 )
        
            // 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.
            alert('registration id = '+e.regid);
        
        break;

    case 'message':
        // this is the actual push notification. its format depends on the data model
        // of the intermediary push server which must also be reflected in GCMIntentService.java
        alert('message = '+e.message+' msgcnt = '+e.msgcnt);
        break;

    case 'error':
        alert('GCM error = '+e.msg);
        break;

    default:
        alert('An unknown GCM event has occurred');
        break;
    


;

对不起,如果代码太多,但我不知道从哪里开始。我对此很陌生,但我会尝试描述发生了什么:

我调用函数app.initialize 我在 XCode 中的输出给了我这个:[LOG] Received Event: deviceready 所以因为我的事件是“设备就绪”,所以 app.recievedEvent 应该开始,对吧? 因为我的设备是 IOs-设备 pushNotification.register 应该启动,对吧?

--> 但什么也没发生(除了我在 Xcode 中获得输出:[LOG] Received Event: deviceready)

我的设备没有收到推送通知


这里是我的 php 文件中的代码:

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', 'cert.pem');


$socketClient = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);


$payload['aps'] = array('alert' => 'test message', 'sound' => 'default', 'badge' => '2');
$payload['id'] = 666;

$payload = json_encode($payload);


$deviceToken = str_replace(' ', '', $data['deviceToken']);


$message = pack('CnH*', 0, 32, $deviceToken);


$message = $message . pack('n', strlen($payload));

$message = $message . $payload;


fwrite($socketClient, $message);


fclose($socketClient);

【问题讨论】:

【参考方案1】:

要接收推送通知,您需要发送通知。您是否已经设置了服务器来执行此操作。在 DevGirl 的示例中,她使用 node.js 服务器发送推送通知。 如果您关注她的帖子,您的手机应该已正确设置以接收通知。

如果您需要推送服务,我有一个 Csharp 代码可以做到这一点

【讨论】:

哦,好的,谢谢。我认为在本教程的这一点上一切都设置正确,我应该会收到屏幕截图中的通知。嗯,这是有道理的,它不是那样的。我曾经有一个 Xcode 应用程序(没有 phonegap),我确实从我的服务器的外部 php 文件发送了通知 - 请参阅另一个答案中的代码。是否可以将此文件中的通知发送到我的设备的苹果通知中心?我还没有用 node.js 或 Csharp 做过任何事情......

以上是关于使用 IOs-PushPlugin Cordova 2.5 进行首次推送的主要内容,如果未能解决你的问题,请参考以下文章

Cordova与现有框架的结合,Cordova插件使用教程,Cordova自定义插件,框架集成Cordova,将Cordova集成到现有框架中

cordova 使用啥浏览器

如何使用cordova插件中downloader

使用 Cordova-Android 6.2.0 的 Cordova 错误 - getFileResources 不是函数

使用cordova将图片从android画廊分享到cordova应用程序

什么应用是 cordova开发的