ブラウザのセッション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); } }
できた!!
一端ブラウザが起動されるのが微妙なのとセキュリテイ的には
あまりよろしくないので、認証や決済に使うのはやめた方がいいんだろうな…