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);
        	}
        });
    }
}

こんな感じ。

そしたら、ログインできた。

しかしエミュレーターのコネクションがキレまくりだなぁ〜