在「[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!