[TITANIUM] 在android中的webview取得cookie

雖然titanium一向號稱可以使用同樣的程式碼同時製作出android跟ios的app,但實際上事情總不是這麼的歡樂….
像是一個簡單的是用twitter帳號來進行登入的動作,由於api的工程師是使用cookie跟CSRF token配對好的金鑰來跟api端進行認證,ios因為webview跟HTTPClient會自動共用cookie,所以只要在webview登入twitter後,就可以以新建立的HTTPClient來跟api索取token然後進行跟api端的互動。
只是到了android的時候,webview與HTTPClient不再自動共用cookie,所以我們得要在HTTPClient把object傳送到api之前利用setRequestHeader帶入Cookie,才有辦法取得正確的token。
所以問題就在於怎麼在登入成功的webview中,取出當時的cookie。接著google會告訴我們在這邊有這麼一個方法:

webView.addEventListener('load',function(e) {
  var cookies = webView.evalJS("document.cookie").split(";"); 
  Ti.API.info( "# of cookies -> " + cookies.length  );
  for (i = 0; i <= cookies.length - 1; i++) {
    Ti.API.info( "cookie -> " + cookies[i] );
  }
});

可惜我所得到的卻始終是空值(NULL)。
繼續閱讀

[TITANIUM] 自定模組

[TITANIUM] 自定模組
承繼之前在「[TITANIUM] ALLOY與GCM的應用」中使用Google-Cloud-Messaging-Titanium來實現android與接收GCM的訊息後。隨之而生的問題是當我們在「啟動一次app,保持在背景動作的情況下重新開機後」就收不到push了。
雖然也有網友使用0.6版可以解決問題,只是我從0.2版用到0.6版,收不到就是收不到@@
看了Google-Cloud-Messaging-Titanium的issues後,有很多人都主張重組模組。但是一開始當看到官方說明,一張落落長要安裝的工具就頭皮發麻….
繼續閱讀

[TITANIUM]的Intent與Notification

原本想要實現的事情很簡單,就是收到asp server端的push後,app自己做一個Intent放進Notification後丟出去,然後使用者按下Notification的通知後,在app的webView中打開預先存在Intent中的網址。
事前GCM跟asp的準備當然要先搞定。然後開始準備來存取Intent物件。

第一個先嘗試用putExtra:

Ti.Android.currentActivity.addEventListener('resumed',function(e){
 var intent = Titanium.Android.currentActivity.getIntent();
 var _url = intent.getStringExtra("gotoURL");
//$.webview.url = _url;
});
var intent = Ti.Android.createIntent({
 action : Ti.Android.ACTION_MAIN,
 className : 'tw.idv.Justflyctivity',
 flags : Ti.Android.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP
});
intent.putExtra("gotoURL","http://justfly.idv.tw");
intent.addCategory(Ti.Android.CATEGORY_LAUNCHER);			    
 
var pending = Ti.Android.createPendingIntent({
 intent : intent,
 type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY,
 flags : Ti.Android.FLAG_ACTIVITY_NO_HISTORY
});
 
var notification = Titanium.Android.createNotification({
 icon: Ti.App.Android.R.drawable.notification_icon,
 contentIntent : pending,
 contentTitle : e.data.title,
 contentText : _message[0],
 tickerText: _message[0],
 flags:Titanium.Android.ACTION_DEFAULT | Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS
});
 
Titanium.Android.NotificationManager.notify(1, notification);

然後發現不管再怎麼試,_url都沒有東西。
繼續閱讀