3

最近、新しい Google Expansion APK メカニズムの利用を開始しました。全体的にはうまく機能しますが、私たちにとってはやや不安定なようです. いくつかの質問:

  1. アプリと一緒に拡張アプリをダウンロードするユーザーもいれば、ダウンロードしないユーザーもいるため、アプリ自体がダウンロードする必要があります。それが自動的に機能するときとそうでないときを支配するものを誰か知っていますか?

  2. 拡張ファイルを自分でダウンロードする必要がある場合、Google Play はファイル サイズに対して -1 を返し、URL に対して null を返し、拡張ファイルが存在しないことを示します。アプリを再度実行すると、通常、2 回目は有効なサイズと URL が返されます。他の誰かがこのフレークネスを見ますか?

コードの基本は次のとおりです。

これは、コールバックを介してライセンスを確認するための呼び出しを設定する方法です

    policy = new APKExpansionPolicy( context, new AESObfuscator( SALT, context.getPackageName(), deviceId ) );
    mChecker = new LicenseChecker( context, policy, BASE64_PUBLIC_KEY );
    mLicenseCheckerCallback = new MyLicenseCheckerCallback();
    mChecker.checkAccess( mLicenseCheckerCallback );

次に、コールバックでこれを allow() メソッドに渡します (ライセンスが有効な場合)。

    public void allow( int reason )
    {
        String expansionFileName = policy.getExpansionFileName( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        String expansionURL = policy.getExpansionURL( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        long expansionFileSize = policy.getExpansionFileSize( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
    }

この新しいコードを使用してアプリをリリースしたばかりですが、かなりの数のユーザーが、expansionFileSize として -1 を返し、URL として null を取得しています。これにより、ユーザーは拡張ファイルをインストールできなくなります。通常、アプリを再度実行すると、2 回目 (または 3 回目) に動作します。

何が起こっているのか考えている人はいますか?

4

3 に答える 3

2

ライセンス サーバーに再度接続しようとすると、APKExpansionPolicy がローカルにキャッシュされた結果で応答するため、-1 が返されますが、URL、ファイルサイズ、およびファイル名はキャッシュされず、最初の実際の応答後に失われます。APKExpansionPolicy はこれらの結果をキャッシュしません。それを説明する APKExpansionPolicy ソース コードからのコメントを以下に示します。

拡張 URL は設定にコミットされませんが、代わりに、ライセンス応答がフロントエンドによって処理されるときに保存されることを意図しています。

そのため、( allowコールバック メソッドで)最初の成功した応答を取得した直後に、これらの値を設定に保存する必要があります。

于 2012-06-25T20:45:13.833 に答える
1

Android Developersに関するブログ投稿では、 #1 に対処しています。

ほとんどの新しいデバイスでは、ユーザーが Android マーケットからアプリをダウンロードすると、拡張ファイルが自動的にダウンロードされ、拡張ファイルがダウンロードされるまで払い戻し期間は開始されません。古いデバイスでは、アプリは最初の実行時に拡張ファイルをダウンロードします

于 2012-04-05T19:18:56.863 に答える