我刚刚接触了离子骨架。我之前和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
仅适用于物理设备,而不适用于浏览器答案 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);
})
})
}
}
}