我正在使用Titanium的推送通知功能,适用于Android和iOS。我正在从alloy.js初始化推送通知订阅,即基本上调用CloudPush的retrieveDeviceToken方法来获取设备令牌然后
Cloud.PushNotifications.subscribe({
channel : _channel,
device_token : _token,
type : OS_IOS ? 'ios' : 'android'
}, function(_event) {..}
挑战在于,每次重启应用程序时都会调用alloy.js。这意味着生成一个新的设备令牌,并在每次重新启动应用程序时反复订阅频道。
我想知道这是否是使用推送订阅的正确方法。有没有办法避免来自同一设备的这些多个订阅。
答案 0 :(得分:1)
实际上你做的是正确的,但推送通知背后有一个事实:
见下面的代码片段:
var CloudPush = require('ti.cloudpush');
if ( CloudPush.isGooglePlayServicesAvailable() ) {
CloudPush.retrieveDeviceToken({
success : tokenSuccess,
error : tokenError
});
// Process incoming push notifications
CloudPush.addEventListener('callback', pushRecieve);
} else {
alert("Please enable Google Play Services to register for notifications.");
}
// Save the device token for subsequent API calls
function tokenSuccess(e) {
var previousToken = Ti.App.Properties.getString("DEVICE_TOKEN", "");
var newToken = "" + e.deviceToken;
Ti.API.info('** New Device Token = ' + newToken);
if (newToken !== previousToken) {
Ti.App.Properties.setString("DEVICE_TOKEN", newToken);
var Cloud = require("ti.cloud");
Cloud.PushNotifications.subscribe({
channel : _channel,
device_token : newToken,
type : OS_IOS ? 'ios' : 'android'
}, function(_event) {});
}
}
function tokenError(e) {
alert('Failed to register for push notifications.');
}