AndroidのWebViewにて、mixiにログインするためのソース
ひさびさに日記を。気がつけば、はてな市民じゃなくなってる(笑)!!
さて、最近プライベートでは、Androidの開発を中心に行っています。
だいたい個人で、Androidのアプリを開発する場合、既存のWebサービスと連携するものが多いのではないでしょうか?
そこで私は、自分でmixiのクライアントアプリを作成したいと思い、開発をスタートしました。
参考資料をもとに、Web画面をAndroidに表示するには、WebViewというクラスを利用することがわかりました。そこで、下記のソースでエミュレーター上で表示に成功しました。
package org.mixiforandroid; import java.lang.String; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class mainMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { WebView wv; super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView) findViewById(R.id.web_view); wv.loadUrl("http://mixi.jp/"); wv.requestFocus(); } }
しかしここで、問題が!!
ログインしようとしたら、こんなこと言われた!!
<cookieが無効になっているため、ログインできませんでした。>
ん〜、WebViewのCookie設定ってどうやって有効になるのだろうか、と悩みました。
ネットで調べても、なかなか解決方法が載っていませんでしたが、そのなかでWebViewClient、CookieManagerというクラスがあるのを知りました。
なんだか、これでできそうだなぁと。。。そこで、下記のソースを作成。
package org.mixiforandroid; import java.lang.String; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.CookieManager; import android.webkit.WebViewClient; public class mainMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { WebView wv; super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView) findViewById(R.id.web_view); wv.loadUrl("http://mixi.jp/"); wv.requestFocus(); wv.setWebViewClient(new WebViewClient(){ String loginCookie = ""; @Override public void onLoadResource(WebView wv, String url){ CookieManager cMgr = CookieManager.getInstance(); loginCookie = cMgr.getCookie(url); } @Override public void onPageFinished(WebView wv, String url){ CookieManager cMgr = CookieManager.getInstance(); cMgr.setCookie(url, loginCookie); } }); } }
こんな感じ。
しかしエミュレーターのコネクションがキレまくりだなぁ〜