プログラムによって、インストールされたアプリストアのインストールを確認しますか?


8

バックグラウンド

私のアプリには、「評価」ボタンがあります。通常のパスに従います-ユーザーがクリックしてインテントを開始し、Playストアでアプリのリストを開きます。すべて順調です。ここで、さまざまなアプリストア(Amazonなど)経由でアプリを配布したいので、ユーザーが「評価」ボタンを押した場合、ユーザーをGoogle Playストアに移動させたくありません。彼らがそれを得た店。

各店舗のAPK

これは可能ですが、管理することは完全な悪夢になると思います(新しい更新を発行するたびに各ストアに新しいAPKを作成するなど)。

だから私はこの擬似コードのようなものを探しています:

if(rate-me button pressed){

    if (from Google Play Store){
        Go to Google Play Store
    }
    else if (from Amazon Store){
        Go to Amazon Store
    }
}

等々.......

方法はあると思いますが(一部のアプリでは確実に使用する必要があります)、どうすればよいかわかりません。


1
では、同じアプリを作成せず、リソースに基づいて決定するのはなぜでしょうか。内容に基づいてopen_store.txtとスイッチを追加しませんか?
wondra 14

こんにちは@wondra、どういう意味かわかりませんか?テキストファイルを作成し、アプリのインストール時にそのファイルに書き込むことを意味します(決められた値で、たとえば、Google Playの場合は1、Amazonの場合は2とします)。次に、ユーザーがrate-meに到達したときにそのファイルをクエリします。ボタン?それがあなたの意味するところなら、それは良いことですが、質問は同じですが、最初にファイルに書き込むことができるように、アプリがインストールされているストアをプログラムでどのように判断しますか?誤解しているかもしれませんが!!
BungleBonce 2014

5
条件付きコンパイルでアプリの3つのバージョンをデプロイするだけです。それぞれ異なるパスを使用します。変数/コードのパスは、コンパイルされた変数に応じて変わる可能性があります。
ヴォーンヒルツ2014

@VaughanHilts、詳しく説明していただけますか?それとも、答えとして完全なアイデアを投稿しますか?ありがとう!
BungleBonce 2014

1
私はヴォーン・ヒルツが言ったのとまったく同じように言っていた。店舗ごとに異なるバージョンのアプリを作成します。
パンダパジャマ2014

回答:


7

Android向けに作成しているようにJavaで作成していると想定しますが、そうでない場合は、選択した言語でメソッドを検索して同じ種類の結果を得ることができます。Javaには条件付きコンパイルのサポートが組み込まれていないため、ここで実行できるかなり簡単なことがいくつかあります。ローテクソリューションが最適な場合もあります。

アプリストアごとに異なるコードからコンパイルされた異なるアプリをデプロイします。とても簡単なことです。グローバル文字列を用意し(または、適切なロジックがある場所にカプセル化し)、値を割り当て、コンパイルしてデプロイするだけです。とても簡単です。

文字列、列挙値、整数のいずれかです。各値がアプリストアごとに一意である限り、それは本当に問題ではありません。「Amazon」、「GooglePlay」、「XXXX」、「ZZZZ」、「YYYY」などのオプションを使用して、強く型付けされた列挙型をすばやく提案することをお勧めします。これを自動化する場合は、この値を変更するスクリプトを作成するか、サードパーティツールを使用してコンパイルフラグを渡します。

自動化する

このステップをさらに進めたい場合は、オプションをリソースファイルとして解析します。各デプロイメントに1つずつ、スクリプトを記述します。「store.dat」という名前のファイルを用意し、デプロイ時にそのファイルにデプロイされるストアの値を書き込みます。LinuxまたはOSXを使用している場合は、次のような単純なものにすることができます。

echo "Google" > resources/store/store.dat
RUN COMPILATION STUFF HERE

これらすべてのスクリプトをロックステップで実行する1つのスクリプトを作成すると、堅牢で自動化されたソリューションが得られます。


この@VaughanHiltsに感謝し、いくつかの質問を受けました、現在、市場へのURLを含む「Market」という文字列値があります。市場ごとに異なるAPKがありますか?
BungleBonce 2014

確実なこと。:)さまざまな方法でこれを行うことができます。魔法の弾丸は、インストールタイプを識別できるようにすることです。
Vaughan Hilts、2014

わかりました、これまでのところ@VaughanHiltsのところ、私はその部分を手に入れましたが、まだはっきりしないのはこのビットです:「この値を変更するスクリプトを作成するか、自動化したい場合はサードパーティのツールを使用してコンパイルフラグを渡します」 -これが何を意味するのかがはっきりしていません-マーケットストリングを手動で変更した場合、インテントを開始したときにマーケットストリングを渡して、マーケットをオープンするように、この部分が必要ですか? -もう一度感謝します。正しく理解できるように、もう少し詳しく説明していただければと思います。:-)乾杯
BungleBonce 2014

@ user22241こんにちは。ビルドごとに文字列を手動で変更する必要がない限り、その部分を実行する必要はありません。スクリプトを作成すると、変更と展開が自動的に行われます。他にご不明な点がありましたら、チャットで続行できます。
Vaughan Hilts

クール@VaughanHilts、私は愚かな質問があります、このサイトでのチャットはどのように機能しますか?使ったことがない。ありがとう!
BungleBonce 2014

2

これを試して:

try {
    String packagename = context.getPackageName();
    final PackageManager pm = context.getPackageManager();
    PackageInfo pInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
    String installerPackagenName = pm.getInstallerPackageName(packageName);
    if(installerPackagenName.equalsIgnoreCase("com.amazon.venezia")){
        //Go to Amazon Store
    } else if (installerPackagenName.equalsIgnoreCase("com.android.vending")){
        //Go to Google Play Store
    } else {

    }
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.