Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can’;使用ngCordova无法在Android中获得推送通知_Javascript_Angularjs_Cordova_Ionic - Fatal编程技术网

Javascript Can’;使用ngCordova无法在Android中获得推送通知

Javascript Can’;使用ngCordova无法在Android中获得推送通知,javascript,angularjs,cordova,ionic,Javascript,Angularjs,Cordova,Ionic,我很难让推送通知(使用ngCordova插件)正常工作。我完全按照网站上记录的示例代码进行了操作: (唯一的区别是我没有deviceready侦听器,相反,我的代码在ionicPlatform.ready侦听器中。) 这是我的密码: angular.module('myApp', ['ionic', 'ngCordova']) .run(function($ionicPlatform, $rootScope, $state, $cordovaPush) { $ionicPlatform.re

我很难让推送通知(使用ngCordova插件)正常工作。我完全按照网站上记录的示例代码进行了操作:

(唯一的区别是我没有deviceready侦听器,相反,我的代码在ionicPlatform.ready侦听器中。)

这是我的密码:

angular.module('myApp', ['ionic', 'ngCordova'])
.run(function($ionicPlatform, $rootScope, $state, $cordovaPush) {
  $ionicPlatform.ready(function() {
    var config = {
      "senderID": "myID100001000"
    };

    $cordovaPush.register(config).then(function(result) {
      alert(result);
    }, function(err) {
      alert(err);
    })      
  }); 

  $rootScope.$on('$cordovaPush:notificationReceived', function(event, notification) {
    switch(notification.event) {
      case 'registered':
        if (notification.regid.length > 0 ) {
          alert('registration ID = ' + notification.regid);
        }
        break;

      default:
        alert('An unknown GCM event has occurred');
        break;
    }
  });  
})
当我的应用程序启动时,我确实收到了“OK”警报,因此我知道它成功地通过了$cordovaPush.register调用。然而,我本来希望在之后立即收到“已注册”的通知事件,但我从未收到通知


任何帮助都将不胜感激。

解决方案在评论中,但这需要一个正确的答案

首先,
寄存器
回调总是返回
OK
,只要您传递一个
发送者ID
,但是如果从未调用
$cordovaPush:notificationReceived
事件(可能需要几秒钟),则此ID可能是错误的

您必须使用项目编号,而不是项目ID

要获得号码,请转到,选择项目,然后您将进入概览页面。在本页顶部,您将看到如下内容:

Project ID: your-project-id        Project Number: 0123456789

只需复制并使用项目编号,一切都应该正常。

我为此遭受了很多痛苦,我发现,目前cordova push插件实际上有两个版本:

  • (已弃用)
  • (新的)
ngCordova支持这两个版本,但只记录了不推荐的版本

不推荐使用的版本是$cordovaPush 而较新的是$cordovaPushV5,它们有完全不同的方法

对我来说,问题是我下载了cordova插件推送,并试图用ngCordova站点上的旧文档来实现它

代码是:

/*
*推送通知事件的非弃用版本
*/
函数寄存器V5(){
$ionicLoading.show({
模板:“”
});
if(爱奥尼亚平台is('browser')){
警报(“您正在broswer上运行,请切换到您的设备。否则您将不会收到通知”);
$ionicLoading.hide();
返回;
}
/**
*配置文件:
* https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/API.md#pushnotificationinitoptions
*/
var GCM_项目_ID='xxxxxx';
$cordovaPushV5.initialize({
“安卓”:{
“clearNotifications”:false,
“senderID”:GCM\u项目\u ID
}
});
$cordovaPushV5.register().then(函数(deviceToken){
日志(“已成功注册”,deviceToken);
$scope.data.deviceToken=deviceToken;
//下面是配置$cordovaPushV5通知发射器所需的代码。
//不要传递函数,它不是处理器。
$cordovaPushV5.onNotification();
$cordovaPushV5.onError();
$ionicLoading.hide();
},函数(错误){
console.log(“注册失败”);
log(“错误对象:”,错误);
$ionicLoading.hide();
});
}
$rootScope.$on(“$cordovaPushV5:notificationReceived”,函数(事件、数据){
控制台日志(“收到通知”);
日志(“数据对象:”,数据);
var前台=data.additionalData.前台| | false;
var threadID=data.additionalData.payload.threadID | |“”;
var group=data.additionalData.payload.group | | false;
如果(前景){
//如果应用程序在前台接收应用程序推送处理时处于前台,请执行某些操作
log(“在前台接收通知”);
}否则{
//在应用程序处于后台或未启动时处理推送消息
log(“在后台接收通知”);
//当用户在后台单击通知界面时打开FB messanger应用程序。
if(type of data.additionalData.coldstart!=“未定义”&&data.additionalData.coldstart==false)
如果(!组)
//打开特定用户聊天窗口的FB Messenger
打开窗户-messenger://user/“+threadID”、“U系统”、“位置=否”);
其他的
//打开特定群组聊天窗口的FB Messenger
打开窗户-messenger://groupthreadfbid/“+threadID”、“U系统”、“位置=否”);
}
});
$rootScope.$on(“$cordovaPushV5:erroroccurrent”,函数(事件,错误){
console.log(“发生通知错误”);
日志(“事件对象:”,事件);
log(“错误对象:”,错误);

});我有完全相同的问题。你能修好吗?@casper123是的,我修好了。问题是我使用的是项目id而不是项目编号。这没有很好的记录。另外,在我使用的cordova版本中,事件名为pustNotificationReceived,而不是$cordovaPush:notificationReceived,因此我需要将其重命名。嗨,Prabhu。我正面临与你完全相同的问题。我已经检查了我的senderID,我非常确定我的配置是正确的。但仍然不起作用。我也没有任何ngCordova问题。有什么建议吗?@Prabhu我只找到了项目id,没有项目编号。怎么解决?@casper123你解决了这个问题吗?