あるサーバに標準ブラウザを使用してアクセスしてから、アンドロイドマーケットの
ダウンロードページに遷移してるのですが、そのサーバでクッキーにある情報を保存しています。
※保存する情報はサーバにアクセスされた時点で作成されるもので、
毎回違う情報が作成されます。
アプリをインストールした時に、初期起動の一度だけこのサーバにアクセスして
保存してある情報を取得したいと考えています。
標準ブラウザのクッキーを取得することは不可能とのことだったので、クッキーで
保存するのはあきらめて、何か他の方法で保存しようと考えています。
保存は色々な方法があると思いますが、保存した情報の取得ができません。
(取得は、DefaultHttpClientでと考えています)
例えば、スマートフォンを一意に識別できるIDか何かをダウンロード時に
埋め込むことができれば実現できるのでは?とも思いましたが無理なようです。
上記を実現しようとした場合に考えられる方法はありますでしょうか?
サイトでもサンプルコードでもOKですが、動作確認済みのものをお願いします。
(動作確認ないものは不要です)
その「あるサーバー」ではユーザーに何らかの操作をさせるのですか?
もしそのサイトにアクセスするだけで(ユーザーが何もしなくても)自動的にクッキーを生成しているのなら、同じ事を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="mainactivity" /> </intent-filter>
これでこのActivityは"myapp://mainactivity/"というURLに反応するようになります。
あとは標準ブラウザにインテントを飛ばしてサーバーにアクセスさせ、サーバーから"myapp://mainactivity/"にリダイレクトをかければAndroidアプリへのコールバックが可能です。
Activityでは
String url = activity.getIntent().getDataString();
でURLが取得できますから、リダイレクトURLに必要なデータを含めれば任意のデータを受け渡し可能です。
ただ、URLにプライベートなデータを含めるのは筋が悪いと思うので(URLというものは暗号化するわけにいかないので、外からは丸見えです)、
ここでは認証用に一時的に生成した識別子だけを渡しておいて、実際に必要なデータはアプリ側でDefaultHttpClientなりで取得したほうがいいでしょう。
あとリダイレクトURIは万が一の重複を避けるため、パッケージ名を使うなどする必要があるでしょう。
一瞬ブラウザが立ち上がってしまう以外はユーザーの目に見える現象はないと思います。
難点としては、この方法が通用しない仕様のブラウザがユーザーの間に広まってしまうと厄介なことになる、ということでしょうか。
(そのような可能性は限りなく低いと思いますが、必要ならトラブルシューティングとして別のブラウザで試してみるよう告知することも考えられるかも)
PCブラウザでスマートフォンのメールアドレスを登録させて、スマートフォンに一意なキーを含めたURL案内メールを送って、サーバーにアクセスさせ、サーバー側で確認後、アンドロイドマーケットのダウンロードページに誘導する。。。という造りにすればクッキーとか悩まなくてもOKではないですか?