离子推不工作 - 用户未注册

时间:2015-10-04 13:16:44

标签: android angularjs cordova ionic-framework

我刚刚接触了离子骨架。我之前和Phonegap以及AngularJS合作过,所以对我来说并不是那么新鲜。 我发现有一项新功能可以通过Ionic Push功能(http://blog.ionic.io/announcing-ionic-push-alpha/)在Ionic中使用Google Cloud Messaging推送通知。

来自app.js

的相关代码行
angular.module('starter', ['ionic','ionic.service.core', 'starter.controllers', 'starter.services'])

.run(function($ionicPlatform) {
  $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 && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);

    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleLightContent();
    }

    // enable push notifications
    Ionic.io(); 

    // enable users (http://docs.ionic.io/docs/user-quick-start)
    // this will give you a fresh user or the previously saved 'current user'
    var user = Ionic.User.current();

    // if the user doesn't have an id, you'll need to give it one.
    if (!user.id) {
      user.id = Ionic.User.anonymousId();
      // user.id = 'your-custom-user-id';
    }
    console.log('user-id:' + user.id);

    //persist the user
    user.save();

    var push = new Ionic.Push({
      "debug": true,
      "onNotification": function(notification) {
        var payload = notification.payload;
        console.log(notification, payload);
      },
      "onRegister": function(data) {
        console.log(data.token);
      }
    });

    push.register(function(token) {
      console.log("Device token:",token.token);
    });
    push.addTokenToUser(user);
    console.log('token added to user');

  });
})

ionic serve

登录
ionic $ 0     361081   log      Ionic Core:, init
1     361083   log      Ionic Core:, searching for cordova.js
2     361085   log      Ionic Core:, attempting to mock plugins
3     361155   log      user-id:1cc3d21c-b687-4988-b944-ad07b1a677c8
4     361158   log      Ionic Push:, a token must be registered before you can add it to a user.
5     361159   log      Ionic Push:, token is not a valid Android or iOS registration id. Cannot save to user.
6     361159   log      token added to user
7     361160   log      Ionic Push:, register
8     361160   error    ReferenceError: PushNotification is not defined, http://localhost:8100/lib/ionic-platform-web-client/dist/ionic.io.bundle.min.js, Line: 2
9     361526   log      Ionic User:, saved user

欢迎任何意见,如果需要,我也非常乐意提供更多信息。

编辑10/05/2015:

  • 发现dev_push = false仅适用于物理设备,而不适用于浏览器
  • 我甚至在注册用户之前尝试向用户添加令牌

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,目前在线答案似乎不多。

但即使在真实设备上,它也不会将令牌保存给用户。

我必须首先决定上线,然后使用离子部署进行跟进。

我认为你必须把这一行 push.addTokenToUser(用户);

根据本文档在寄存器回调中 http://docs.ionic.io/docs/push-usage

答案 1 :(得分:1)

您还需要声明' ionic.service.push'如果您想使用角度模块,请将其作为依赖项。

angular.module(' starter',' ionic',' ionic.service.core',' ionic.service。推'])

答案 2 :(得分:0)

我喜欢这样,它有效:

        Ionic.io();

        var user = Ionic.User.current();

        if (!user.id) {
            user.id = Ionic.User.anonymousId();

            // save our newly created user
            user.save();
        }

        var push = new Ionic.Push({});

        push.register(function (token) {
            console.log("Got Token:", token.token);

            // now we have token, so add it to user
            push.addTokenToUser(user);

            // don't forget to save user to Ionic Platform with our new token
            user.save();
        });

        // set this user as current, so we can acess him later
        Ionic.User.current(user);

答案 3 :(得分:0)

你使用过这个

吗?
ionic config set dev_push true-if testing in emulator or laptop
ionic config set dev_pushfalse - if testing on the phone

ionic push --google-api-key Your API Key

ionic config set gcm_key Project Number

您的令牌是特定设备唯一的注册ID。这是由android发送给你的。

您的手机(使用API​​密钥)--------->到谷歌的GCM
Google GCM(通过您的项目编号和API密钥识别它)----->哦,你让我记下它。 (将令牌ID保存在其DB中并发送给您。)

您获得了设备唯一的注册ID(如果卸载了应用,则会更改)。 你打电话给你的服务器说嘿,这是你的用户。如果你得到了什么,请通知我。

服务器有责任,说,好吧,伙计,我明白了。使用您的详细信息保存注册ID,可能是您的用户名在DB中。

现在来自服务器。

我需要告知我的用户很多(或意外或事情) 从DB中提取所有目标注册ID(可能在某种情况下)

registrationIds.push(regId)//循环

and sender.send(message, registration, function(err, result){
});

发送给Google。谷歌看到哦,只有这个API Key的许多人(不是所有人)都需要通知。没问题我会通知他们,你会收到通知,亲爱的朋友。

答案 4 :(得分:0)

正如the link中所述,向$ionicUser添加令牌是通过执行user.addPushToken(pushToken);完成的。

为此,您应首先将应用配置为不使用开发推送,

ionic config set dev_push true

初始化Ionic.io和Ionic.push后,加载用户或创建一个新的随机ID,

  Ionic.io();

  var push = new Ionic.Push();

  Ionic.User.load(localStorage.id).then(function (user) {
    Ionic.User.current(user);
    pushFactory.register(push, user);
  }, function (error) {
    /*the user with that id is not present , so create one with a random id and register the push */
  });

推送工厂定义如下,

function pushFactory() {

return {
  'register': function (push, user) {
    push.register(function (pushToken) {
      user.addPushToken(pushToken);
      user.save().then(function (answer) {
        console.log('user saved'+answer);
      })
    })
  }
}
}