在「[titanium] Apple Push Notification Services & Titanium SDK 2.0」中,雖然實現了Push Notification,但是,還要自己準備一張php才能做發佈(但其實或許在某些時候這樣反而更能客製化push的時機跟內容也不一定)。
而既然appcelerator已經提供了雲端服務,不用一下實在有點可惜,並且也感謝默司 (Herxun co.) 提供的資料,就照著它做了一點點的修正,實作了這個服務。
不過因為遊戲還是必須有一個自己的資料庫,所以這個例子中等於做了雙重的登入:
var Cloud = require('ti.cloud');
exports.doLogin = function(uinfo) {
doXHR(function(res){
Ti.API.info('model.doLogin - onload');
if(res.id > 0){
Ti.App.fireEvent("loading:lock");
Cloud.Users.login({
login: 'j'+res.id+'@justfly.idv.tw',
password: res.password,
}, function(e) {
Ti.App.fireEvent("loading:unlock");
if (e.success) {
Ti.App.fireEvent("login:success",res);
if(Titanium.Platform.osname == 'android')
retrieveDeviceTokenAndroid(); //註冊Android Device
else
retrieveDeviceTokenApple(); //註冊IOS Device
} else {
alert('ACS loginError:\\n' + ((e.error && e.message) || JSON.stringify(e)));
}
});
}else{
Ti.App.fireEvent("login:error");
}
},{
action:'doLogin',
name:uinfo.name,
password:uinfo.password
});
}
這樣就可以登入acs服務了。至於在acs創建使用者的方式,在「[titanium] Apple Push Notification Services & Titanium SDK 2.0」中的留言裡就蠻完整的,這邊就不多寫嚕。另外提供它註冊硬體的function:
function retrieveDeviceTokenApple(){ //跟APNS 取得Token
Ti.Network.registerForPushNotifications({
types : [Ti.Network.NOTIFICATION_TYPE_ALERT, Ti.Network.NOTIFICATION_TYPE_BADGE, Ti.Network.NOTIFICATION_TYPE_NEWSSTAND, Ti.Network.NOTIFICATION_TYPE_SOUND],
success : function(e) {
ACSsubscribe(e.deviceToken,'ios');
},
error : function(e) {
alert(e.error);
},
callback : function(e) {
Ti.API.info(JSON.stringify(e.data));
}
});
}
function ACSsubscribe(deviceToken,osname){
Cloud.PushNotifications.subscribe({
channel : 'friend_request',
device_token : deviceToken,
type : osname
}, function(e) {
if(e.success) {
Ti.API.info('ACSsubscribe:success');
} else {
alert('ACSsubscribe:error:\\n' + ((e.error && e.message) || JSON.stringify(e)));
}
});
}
然後還必須發佈道實機上才能有效的註冊硬體!看到左上的圖就表示成功啦~
請問板主有試過在Titanium使用Android的GCM嗎?
謝謝
我沒有試過耶~目前都是用ios!