やきにくとくにきや

WEBサービスとイベントに夢見るエンジニアの技術メモ、チラシの裏。そして焼肉たべたい

ブラウザのセッション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の<activity>要素の下に記述

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

f:id:kunikiya:20120204023855p:image:w360

できた!!

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

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

 - 未分類