アンドロイド アプリの作成をしています。


あるサーバに標準ブラウザを使用してアクセスしてから、アンドロイドマーケットの
ダウンロードページに遷移してるのですが、そのサーバでクッキーにある情報を保存しています。

※保存する情報はサーバにアクセスされた時点で作成されるもので、
 毎回違う情報が作成されます。

アプリをインストールした時に、初期起動の一度だけこのサーバにアクセスして
保存してある情報を取得したいと考えています。

標準ブラウザのクッキーを取得することは不可能とのことだったので、クッキーで
保存するのはあきらめて、何か他の方法で保存しようと考えています。

保存は色々な方法があると思いますが、保存した情報の取得ができません。
(取得は、DefaultHttpClientでと考えています)

例えば、スマートフォンを一意に識別できるIDか何かをダウンロード時に
埋め込むことができれば実現できるのでは?とも思いましたが無理なようです。

上記を実現しようとした場合に考えられる方法はありますでしょうか?

サイトでもサンプルコードでもOKですが、動作確認済みのものをお願いします。
(動作確認ないものは不要です)

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/04/27 16:03:24
  • 終了:2011/05/04 16:05:04

ベストアンサー

id:ekrea No.2

ekrea回答回数3ベストアンサー獲得回数22011/05/03 04:14:41

ポイント35pt

その「あるサーバー」ではユーザーに何らかの操作をさせるのですか?

もしそのサイトにアクセスするだけで(ユーザーが何もしなくても)自動的にクッキーを生成しているのなら、同じ事を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は万が一の重複を避けるため、パッケージ名を使うなどする必要があるでしょう。


一瞬ブラウザが立ち上がってしまう以外はユーザーの目に見える現象はないと思います。

難点としては、この方法が通用しない仕様のブラウザがユーザーの間に広まってしまうと厄介なことになる、ということでしょうか。

(そのような可能性は限りなく低いと思いますが、必要ならトラブルシューティングとして別のブラウザで試してみるよう告知することも考えられるかも)

その他の回答(1件)

id:fonya3 No.1

fonya3回答回数238ベストアンサー獲得回数102011/04/27 16:24:25

ポイント35pt

PCブラウザでスマートフォンのメールアドレスを登録させて、スマートフォンに一意なキーを含めたURL案内メールを送って、サーバーにアクセスさせ、サーバー側で確認後、アンドロイドマーケットのダウンロードページに誘導する。。。という造りにすればクッキーとか悩まなくてもOKではないですか?

id:turinavi

通常のアンドロイドアプリのインストールの流れでダウンロードから

インストールまでを行うことを目的としています。

ですので、ユーザに余計な手間をかけさせず、また、見た目は他のアプリ同様

アンドロイドマーケットからインストールするような仕組みを考えています。

2011/04/27 16:30:48
id:ekrea No.2

ekrea回答回数3ベストアンサー獲得回数22011/05/03 04:14:41ここでベストアンサー

ポイント35pt

その「あるサーバー」ではユーザーに何らかの操作をさせるのですか?

もしそのサイトにアクセスするだけで(ユーザーが何もしなくても)自動的にクッキーを生成しているのなら、同じ事を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は万が一の重複を避けるため、パッケージ名を使うなどする必要があるでしょう。


一瞬ブラウザが立ち上がってしまう以外はユーザーの目に見える現象はないと思います。

難点としては、この方法が通用しない仕様のブラウザがユーザーの間に広まってしまうと厄介なことになる、ということでしょうか。

(そのような可能性は限りなく低いと思いますが、必要ならトラブルシューティングとして別のブラウザで試してみるよう告知することも考えられるかも)

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません