离子框架PushPlugin:onNotificationGMC不解雇而不能获得REGID [英] Ionic Framework PushPlugin: onNotificationGMC is not fired and cannot obtain regID

查看:251
本文介绍了离子框架PushPlugin:onNotificationGMC不解雇而不能获得REGID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我相信这个问题是这样的问题:

I believe that this problem looks like this question:

<一个href=\"https://stackoverflow.com/questions/25664951/cordova-push-plugin-onnotificationgmc-is-not-fired-and-cannot-obtain-regid/26676141#26676141\">Cordova推插件:onNotificationGMC不解雇而不能获得REGID

但我使用离子框架。我按照这个教程在做PushProcessingService:

But I'm using Ionic Framework. I follow this tutorial in making PushProcessingService:

http://intown.biz/2014/04/11/android-notifications /

//factory for processing push notifications.
angular.module('starter.pusher', [])
        .factory('PushProcessingService', function(MyService) {
            function onDeviceReady() {
                console.info('NOTIFY  Device is ready.  Registering with GCM server');
                alert('NOTIFY  Device is ready.  Registering with GCM server');
                //register with google GCM server
                var pushNotification = window.plugins.pushNotification;
                pushNotification.register(gcmSuccessHandler, gcmErrorHandler, {'senderID': 'myappid', 'ecb': 'onNotificationGCM'});
            }
            function gcmSuccessHandler(result) {
                console.info('NOTIFY  pushNotification.register succeeded.  Result = ' + result);
                alert('NOTIFY  pushNotification.register succeeded.  Result = ' + result)
            }
            function gcmErrorHandler(error) {
                console.error('NOTIFY  ' + error);
            }
            return {
                initialize: function() {
                    console.info('NOTIFY  initializing');
                    document.addEventListener('deviceready', onDeviceReady, false);
                },
                registerID: function(regid) {
                    //Insert code here to store the user's ID on your notification server. 
                    //You'll probably have a web service (wrapped in an Angular service of course) set up for this.  
                    //For example:
                    MyService.registerNotificationID(regid).then(function(response) {
                        if (response.data.Result) {
                            console.info('NOTIFY  Registration succeeded');
                        } else {
                            console.error('NOTIFY  Registration failed');
                        }
                    });
                },
                //unregister can be called from a settings area.
                unregister: function() {
                    console.info('unregister')
                    var push = window.plugins.pushNotification;
                    if (push) {
                        push.unregister(function() {
                            console.info('unregister success')
                        });
                    }
                }
            }
        });


// ALL GCM notifications come through here. 
function onNotificationGCM(e) {
    console.log('EVENT -> RECEIVED:' + e.event + '');
    alert('EVENT -> RECEIVED:' + e.event + '');
    switch (e.event)
    {
        case 'registered':
            if (e.regid.length > 0)
            {
                console.log('REGISTERED with GCM Server -> REGID:' + e.regid + '');
                alert(e.regid);
                //call back to web service in Angular.  
                //This works for me because in my code I have a factory called
                //      PushProcessingService with method registerID
                var elem = angular.element(document.querySelector('[ng-app]'));
                var injector = elem.injector();
                var myService = injector.get('PushProcessingService');
                myService.registerID(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)
            {
                //we're using the app when a message is received.
                console.log('--INLINE NOTIFICATION--' + '');

                // if the notification contains a soundname, play it.
                //var my_media = new Media('/android_asset/www/'+e.soundname);
                //my_media.play();
                alert(e.payload.message);
            }
            else
            {
                // otherwise we were launched because the user touched a notification in the notification tray.
                if (e.coldstart)
                    console.log('--COLDSTART NOTIFICATION--' + '');
                else
                    console.log('--BACKGROUND NOTIFICATION--' + '');

                // direct user here:
                window.location = '#/tab/dash';
            }

            console.log('MESSAGE -> MSG: ' + e.payload.message + '');
            console.log('MESSAGE: ' + JSON.stringify(e.payload));
            break;

        case 'error':
            console.log('ERROR -> MSG:' + e.msg + '');
            alert('ERROR -> MSG:' + e.msg + '');
            break;

        default:
            console.log('EVENT -> Unknown, an event was received and we do not know what it is');
            alert('EVENT -> Unknown, an event was received and we do not know what it is');
            break;
    }
}

但onNotificationGCM(五)回调似乎并没有被工作。我搬到它的工厂里面,但是问题仍然存在。我调用该函数在我app.js:

But the onNotificationGCM(e) callback seems not to be working. I've moved it inside the factory, but the problem persists. I call the function in my app.js:

app.run(function($ionicPlatform, PushProcessingService) {
            try {
                PushProcessingService.initialize();
            } catch (err) {
                alert(err);
            }
            $ionicPlatform.ready(function() {
                // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
                // for form inputs)
                if (window.cordova && window.cordova.plugins.Keyboard) {
                    cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
                }
                if (window.StatusBar) {
                    // org.apache.cordova.statusbar required
                    StatusBar.styleDefault();
                }
            });
        })

请帮我解决这一点。因为我已经卡住了几天。谢谢!! :)

Please help me on solving this. Because I've been stuck for few days. Thank you!! :)

推荐答案

我终于尝试使用ngCordova推送通知插件如下所述:

I finally try to use ngCordova Push Notification plugin as described here:

http://ngcordova.com/docs/plugins/pushNotifications/

一切都工作得很好。

要注意插件不会在浏览器也不模拟器工作。它的工作原理的只有在真实的设备后,于我而言,Android设备。

To be noted: The plugin won't work in browser nor emulator. It works only in real device, in my case, Android device.

我希望这可以帮助像我谁面临同样的问题的人。

I hope this helps people who face the same problem as I had.

这篇关于离子框架PushPlugin:onNotificationGMC不解雇而不能获得REGID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆