ブラウザのセッションIDをandroidアプリで使いたい時

androidアプリとWEBサービスを連携していると、アプリからブラウザの
セッションIDを取得する必要が出てくることがある。


HttpClientとWebViewの間でCookie情報を共有

このエントリを参考にHttpClientとWebViewのクッキーを連携させてみたが、失敗。

できないんですって
アプリをインストールしたスマートフォンで使用しているブラウザの Cookieをアプリが取得することはできますか?


この回答が非常に役に立った。
アンドロイド アプリの作成をしています。

アプリを起動する

ブラウザでサーバにアクセス

アクセス先でセッションIDをパラメータで付加してリダイレクト

アプリでパラメータからセッションIDを取得する

といった流れ



実際にやってみる


まずはサーバ側

re.php
セッションIDを付加してアプリへリダイレクトするだけ

<?php
  session_start();
  header("Location: myapp://kuniactivity?sid=".session_id());
?>

index.php
ブラウザでセッションIDを確認する用のページ

<?php
  session_start();
  echo session_id();
?>

そしてandroid

AndroidManifest.xml要素の下に記述

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="myapp" android:host="kuniactivity" />
</intent-filter>

myapp://kuniactivityでアプリにアクセスできるようになる。



viewTestの中身

package jp.kunikiya.android.viewTest;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

public class viewTest extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String aurl = getIntent().getDataString();
    if(aurl == "" || aurl == null){
    Uri ruri = Uri.parse("http://kunikiya.jp/test/re.php");
    Intent i = new Intent(Intent.ACTION_VIEW,ruri);
    startActivity(i);
  }
  TextView tv = new TextView(this);
  tv.setText(aurl);
  setContentView(tv);
  }
}



できた!!



一端ブラウザが起動されるのが微妙なのとセキュリテイ的には
あまりよろしくないので、認証や決済に使うのはやめた方がいいんだろうな…



参考:
AndroidアプリからURLを渡してブラウザを起動する方法