web-dev-qa-db-ja.com

Google Playからユーザーがダウンロードしたアプリ(有料/無料)のリストを取得する方法は?

最近、このアプリに出会いました Purchase Apps 。これは、Googleアカウントを使用してサインインした後、Google Playで支払ったアプリを何らかの方法で取得できます。

同様のアプリを作成したいのですが、ダウンロードされた無料アプリの場合、どのように行われているのかを見つけようとしています。

ただし、 APIの全リスト を通過した後でも、その情報を取得するためにどのOAuth API Scopeが使用されたかを見つけることができません。

Google Sign in asking for access to androidmarket


編集: here について尋ねた同様の質問が示唆するように、私はこの質問に新しい賞金をかけています、そして、あちこちでそれをする方法とそれで何ができるかについての本当の答えが見えないからです。

質問を複数の部分に絞り込みたい:

  1. 購入したアプリの情報を取得するために使用できるAPIは何ですか?それについてどこで読むことができますか?それを行う方法の完全で実用的な例を示してください。

  2. もっとできますか?たぶん検索を実行しますか?インストールされた無料アプリを表示することはできますか?たぶん、それらがインストールおよびアンインストールされたときですか?そして、それらのアプリのカテゴリーは?

  3. このAPIを使用するための特別な要件はありますか?


編集:私はこれに最大限の報奨金をかけています。どれだけ読んで試しても、ユーザーが今までにダウンロードしたPlayストアからアプリを照会できるPOCを作成できなかったためです(名前、パッケージ名前、インストール日や削除日、アイコンURL、価格など)、有料アプリと無料アプリの両方が含まれます。

誰かが実際のサンプルを見つけたら、それがどのように行われたかを示し、それについてあなたがどのように見つけたかを示してください(ドキュメントまたはソリューションに導いた何か)。私はどこにもそれを見つけることができません、そして、ここでの現在の解決策は私から始めるにはあまりにも曖昧です。

118
abhiank

最新の更新:

これはバグであり、 Google は次のアップデートで対処します。

この問題は、将来のリリースでの検討のために延期しました。 Androidの改善にご協力いただきありがとうございます


この回答はアイデアの集合に変わり、コメントの議論からの情報を含めるために編集されました。

androidmarket apiは、開発者が作成したカスタマイズされた api です。一般公開されていません。

コメントで懸念に対処するため。開発者は、Android DeveloperとGoogleから利用可能な現在のAPIを利用して、これらすべてを管理するプロジェクトを作成します。

Full Account Access、これらの開発者がこれをどのように達成したか正確にはわかりません。

Android.accountsの一部である AccountManager を使用して、資格情報とメソッド getUserData にアクセスすることをお勧めします。アカウントマネージャーはパスワードにアクセスでき、アカウントを作成および削除できます。これは、おそらく Content Providerで使用されます

Udinic/SyncAdapter Authentication を参照してください。

コメントに返信するには:

このブログは、始めるのに役立つはずです。 独自のAndroid Authenticator )を作成します。


これらのアプリが実際にどのように機能するのか、私にはわかりません。また、実装が異なる場合があります(舞台裏での共同作業でない限り、間違いなく異なるでしょう)。

1つの推測。まず、 GoogleSignInAccountcom.google.Android.gms.auth.api.signin を使用します。

scope の定義があり、アプリに付与される許可の範囲を決定します。

requestScopes() を使用して、

public static final String PROFILE

.../Webアプリが無線でアクセスできるようにしますAndroidアプリのインストール。

example の場合:

GoogleSignInOptions gso =
        new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail().
            .requestScopes(new Scope("https://www.googleapis.com/auth/contacts.readonly"))
            .build();

フルアクセスを取得できる場合は、アカウント所有者が使用するすべてのアプリのリストを見つけて、デバイスにあるものと比較できます。

Package Manager は、デバイスに現在インストールされているすべてのアプリのリストを取得します。
PackageInfo は、アプリに関する詳細を提供します。
INSTALL_REASON_USERは、ユーザーがアクティブにインストールしたアプリも除外します。

com.google.firebase.appindexing および Log User Actions をご覧ください。異なる アクション を追跡できます。

ユーザーアカウントの履歴は、 https://myactivity.google.com/myactivity にあります。

役立つリンクは OAuth 2.0 Playground です。


ノードを使用するこのgithubリポジトリ node-google-play は最新のものであり、Google Play APIを呼び出します。 「非公式」API Android-market-api として使用されたアーカイブと同様に、市場を照会します。


アプリ1

appは次の権限を使用することを要求します

バージョン2.1.8は以下にアクセスできます。
$アプリ内購入

その他

  • インターネットからデータを受信する
  • ネットワーク接続を表示する
  • 完全なネットワークアクセス
  • デバイスでアカウントを使用する
  • デバイスがスリープしないようにします
  • googleサービスの設定を読む

注目すべきは、基本的なインストールがあった場合、アプリは許可を設定しないことです。有料アプリがないため、どの機能も使用できませんでした。そのため、最初の検索では、アクセス許可は必要ありませんでした。これは、アプリが私のアカウントにアクセスできなかったことを示します。

許可を確認しました-設定されていませんでした。したがって、必要なのは、質問に表示されているポップアップを受け入れることだけです。


アプリ2

あなたが参照する他のアプリは同じことをしますが、アクセスされているものについてより前もってです。

有料アプリ

セキュリティ/プライバシー通知
このアプリを初めて実行すると、Googleアカウントへの完全な許可が求められます。残念ながら、これが必要な情報にアクセスする唯一の方法です。個人情報は保存されず、アプリに関する情報は、このアプリの開発者と共有されたり、第三者と共有されたりすることはありません。すべては携帯電話にのみ保存されます。


これらのアプリの詳細については、 このブログ投稿 で説明しました。これは、大学の最高のプロジェクト(金銭的利益なし)のためのものでした。開発者自身のアプリ以外のアプリの購入を取得するためのAPI呼び出しがないため、これはAPIの悪用であり、Googleの設計によるステータスではないと思う傾向があります。私はそれがゼロデイ攻撃であると仮定します。その場合、この情報にアクセスする正当な方法はありません。

43
Yvette Colomb

これらのアプリケーションの1つ(My Paid Apps)の場合、ネットワークトラフィックを確認した後、ストアの[アカウント]ページを使用して有料アプリケーションのリストを取得することは明らかです。今、それが使用するメカニズムは、Google Chrome=現在、ポケモンGOはおそらく使用された時点であると同じメカニズムです。

一言で言えば、その手順は次のとおりです。

  1. Login:上記のプログラムが最初のステップで行うことは、ユーザーをログインさせ、ユーザーのアクセストークンにアクセスすることです。そのためには、Android.accounts.AccountManager.getAuthToken()メソッドを使用します。 (詳細: AccountManager )ただし、トークンスコープについては、oauth2:https://www.google.com/accounts/OAuthLoginが要求されます。 Googleの OAth2ドキュメント に基づいて、このスコープは無効であることに注意することが重要です。ただし、Google OAuth v1。

  2. 新しく取得したアクセストークンをubertokenに変換する:現在、実際にubertokenが行うべきことは不明であり、公式のドキュメントはありません。ただし、chromeブラウザーがユーザーにログインするために使用されることが実際に見られました。これはhttps://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1ページを要求することで行われます。

  3. ubertokenをWebサイトセッションに変換:後で、新しく作成されたubertokenを使用して、https://accounts.google.com/MergeSession AP​​Iを使用してWebサイトセッションを取得できます。終点。このステップの後、アプリケーションは基本的に、ログイン中にブラウザーを使用して開くことができるすべての個人ページをロードできます。支払い設定などの特別なページを除きます。

  4. 有料アプリケーションのリストの取得:https://play.google.com/store/accountページのリクエストと解析。

以下は、「 パケットキャプチャでキャプチャされたアプリケーションのトラフィックです。

Captured Traffic

写真ではっきりとわかるように、最終結果は、Chrome Desktop: でPCでストアのアカウントページを通常開いたときに得られるものと同じです。Chrome view source

サイドノート

これらのエンドポイントは、主にGoogle独自のプログラムで使用されており、内部と見なされるため、文書化されていないようです。したがって、長時間実行する予定のプログラムやコード、または実稼働環境では使用しないことを強くお勧めします。また、ここにも悪いニュースがあります。GooglePlayのアカウントページには、有料アプリケーションまたは特別な無料アプリ(特にOEMアプリ)のみがリストされているようです。時間を見つけて、他のアプリケーションをより深く掘り下げてみます。

興味深い記事

ポケモントークン

Google ChromeのOAuth2トークンの活用

10

ルートアクセスがある場合は、/data/data/com.Android.vending/databases/library.db

OnePlus3T:/data/data/com.Android.vending/databases
-rw-rw---- 1 u0_a2 u0_a2 229376 2018-12-26 18:01 library.db

このデータベースにはすべての情報、ダウンロードしたアプリ、購入したアプリ、および実行したアプリ(IAP)が含まれています。

所有権テーブルを確認してください。すべての情報が含まれています。

ownership (account STRING, library_id STRING, backend INTEGER, doc_id STRING, doc_type INTEGER, offer_type INTEGER, document_hash INTEGER, subs_valid_until_time INTEGER, app_certificate_hash STRING, app_refund_pre_delivery_endtime_ms INTEGER, app_refund_post_delivery_window_ms INTEGER, subs_auto_renewing INTEGER, subs_initiation_time INTEGER, subs_trial_until_time INTEGER, inapp_purchase_data STRING, inapp_signature STRING, preordered INTEGER, owned_via_license INTEGER, shared_by_me INTEGER, sharer_gaia_id TEXT, shareability INTEGER, purchase_time INTEGER, PRIMARY KEY (account, library_id, backend, doc_id, doc_type, offer_type))
3
nkalra0123