web-dev-qa-db-ja.com

Androidアプリを特定のデバイスメーカーに制限する方法は?

私はAndroid SPECIFICブランドのスマートフォン用アプリを開発しています-それは私の決定ではなくプロジェクトの要件です。

したがって、Androidマーケットプレイスで、その特定の製造元によって製造されたデバイスのみがアプリを利用できるようにする必要があります。

どうすればいいのか分かりません。

出来ますか?

追伸Androidコードでデバイスメイクを取得できます。そのため、マーケットアプリもデバイスメイクでフィルタリングできるはずです。実際に機能するかどうかはわかりません(もしそうなら素晴らしいだろう)。

25
Nar Gar

アプリケーションコードのデバイス/メーカーに基づいてアプリをフィルタリングする必要はありません。代わりに、Androidマーケットデベロッパーコンソール- https:// market。 Android.com/publish/ アプリ自体を公開したとき。

開発者コンソールに「サポートされているデバイス」セクションがあり、Androidマーケットにアクセスできるすべてのデバイスのリストが表示されます。その後、互換性のないデバイスまたはメーカーを除外できますあなたのアプリで

これは、メインの開発者コンソールのセクションです。

This is the section in the main developer console

ここでは、デバイスやメーカーをアプリの表示から除外できます

Here you can exclude devices and/or manufacturers from being able to see your app

詳細については、 デバイスの可用性 ヘルプページを参照してください。

デバイスの可用性ダイアログは、2つの強力な方法で開発者を支援します。

Androidマーケットでアプリを見つけることができるデバイスを理解する

  1. デバイスの可用性は、マニフェスト設定に基づいて互換性のあるデバイスの動的なリストを提供します。たとえば、apkのマニフェストで大きな画面サイズが指定されている場合、コンソールには、マーケットでアプリを見つけることができるサポートされているデバイスが反映されます。

  2. 動的検索機能を使用して、アプリケーションが利用できないデバイスを確認することもできます。製造元、デザイン名(「Passion」など)、または実際のパブリックデバイス名(「Nexus One」など)で検索して、マニフェスト設定がデバイスをフィルター処理したかどうかを確認できます。問題のあるデバイスまたは互換性のないデバイスをフィルタリングするこの機能は、開発者にデバイス固有の管理オプションを提供します。 「手動で除外されたデバイス」リストにデバイスを追加すると、アプリはマーケットのその除外されたデバイスで利用できなくなります。これは主に、互換性の問題があることがわかっているデバイスを開発者が除外できるようにすることで、開発者が可能な限り最高のユーザーエクスペリエンスを提供できるようにすることを目的としています。

31
Soham

開発者コンソールページのSupported Devicesセクションで、すべてのデバイスのリストを表示できます。これにより、最初は有効に設定されている2,000を超えるスライダータイプのチェックボックスが読み込まれます。残念ながら、インターフェースには「すべてを無効/有効にする」オプションがないようです...

...代わりに、Firebugのインスペクターツールを使用してこれらのスライダーオブジェクトのクラス名を取得し(現在の状態を思い出せない-2つのランダムな大文字の頭字語)、Javascriptコンソールで式を実行してすべてのスライダーの状態を切り替えました。何かのようなもの:

switches = document.getElementsByClassName("ABC DEF"); for(i = 0; i < switches.length; i++) switches[i].click();

これにより、ブラウザが1〜2分フリーズしましたが、その後、すべての電話がサポート対象外としてマークされました。次に、サポートする必要がある電話を有効にできます。

29
Desty

以下はDestyの回答の改善です。

  • クラス名の自動検出
  • 本当にチェックを外す:いくつかのボックスをすでにチェックしていない場合でも機能します

コード:

var className = document.evaluate( 'string(//li[@data-device-id]/checkbox/@class)', document, null, XPathResult.STRING_TYPE, null ).stringValue;

switches = document.getElementsByClassName(className);
for(var i=0; i < switches.length; i++) {
   if (switches.item(i).getAttribute("aria-checked") == "false") switches[i].click();
}

このスクリプトの実行には、約1分かかります。ブラウザのJavaScriptコンソールから実行します。

19
KrisWebDev

KrisWebDevのスクリプトに基づいて、ブランドごとにデバイスを無効にするスクリプトを作成しました。

選択したブランドの<ol>を見つけて編集し、id="sarasa"を追加してから、次のスクリプトを実行してすべてを無効にする必要があります。

var nodes = document.getElementById("sarasa"); for(var i=0; i < nodes.childNodes.length; i++) { if (nodes.childNodes[i].childNodes[0].getAttribute("aria-checked") == "false") { nodes.childNodes[i].childNodes[0].click(); } }
2
Diego Belay

まああなたはそれを論理的な方法で行うことができます。

最初にgetResources().getConfiguration()を使用してハードウェアの詳細を確認します。これで、ハードウェアがこのmdelまたは名前のものである場合に条件を指定できます。

2
Lucifer

このページの回答とは異なる部分を使用して小さなスクリプトを記述しました(@Destyと@MichaelDePhillipsに感謝)。スクリプトは高速で(私のコンピューターでは100から200ミリ秒の間)、切り替えないブランドを指定できます。ここにスクリプトがあります:

console.time('Execution time');
var manufacturers = document.querySelectorAll('[data-manufacturer-group]');

for (var i = 0; i < manufacturers.length; i++) {
    var manufacturer = manufacturers[i];
    var brand = manufacturer.firstElementChild;

    if (brand.tagName == 'H3' && brand.textContent != 'Samsung') {
        console.log(brand.textContent);
        var tags = manufacturer.children;

        for (var j=0;j<tags.length;j++) {
            var tag = tags[j];
            if (tag.tagName == 'OL') {
                var devices = tag.children;
                for (var k=0;k<devices.length;k++) {
                    var device = devices[k];
                    if (device.tagName == 'LI') {
                        var checkbox = device.firstElementChild;
                        var attr = checkbox.getAttribute;
                        if (checkbox.tagName == 'CHECKBOX') {
                            checkbox.setAttribute('aria-checked', 'true');
                        }
                    }
                }
            }
        }
    } 
}
console.timeEnd('Execution time');

これは私の最初のJavaScriptです。すべてのフィードバックを歓迎します。

2
RSchmitt

Google Playのコンソールデザインが進化するにつれ、前の作品を作ることができませんでした。最初のチェックボックスの状態のみが変更されていることに気づきました。クリックするたびにPOSTがgoogleサーバーに送信されるようです。いくつかの試行の後、テンポを追加すると、チェックボックスをループできることがわかりました。これが私にとって有効なJavaScriptです。コピーして貼り付けてくださいブラウザのコンソール(CHROMEおよびFIREFOXでテスト)。ローンが英語でない場合は、次のページのボタンのquerySelectorで「次のページ」を置き換える必要があることに注意してください。

function uncheckAll() {
    const cbxSelector= 'input[type=checkbox]:checked:enabled'
    let checkBoxes = document.querySelectorAll(cbxSelector)
    if (checkBoxes.length > 0) {
        checkBoxes[0].click();
        setTimeout(uncheckAll, 20);
    }else{
      let nextPage = document.querySelector('button[aria-label="Next page"]:enabled');
      if(nextPage){
        nextPage.click();
        setTimeout(uncheckAll, 20);
      }
    }
}

uncheckAll();

すべてのチェックボックスをチェックする場合は、 'input [type = checkbox]:checked:enabled' 'input [type = checkbox]:checked:disabled'

Google Play Consoleでサポートされているデバイスページの[すべてのチェックボックスをオン/オフにする]には、以下のスクリプトを使用します。このスクリプトは、最新のGoogle Play Consoleで正常に動作します。ブラウザのコンソールにコピーして貼り付けます(CHROMEおよびFIREFOXでテスト済み)。

function runScript() {
    for (var bxs = document.getElementsByTagName("input"), j = bxs.length; j--;){
        if (bxs[j].type == "checkbox"){
            bxs[j].click();
        }

    }
    let nextPage = document.querySelector('button[aria-label="Next page"]:enabled');
               if(nextPage){
                 nextPage.click();
                 console.log("next page start");
                 setTimeout(runScript, 20);
               }

}

runScript();
0
Kannappan

アプリケーションを市場にアップロードする場合は、発行ページで、デバイスを追加/削除できる利用可能なデバイスオプションを使用できます。このようにして、製造元とモデル名でデバイスを除外できます。

0
Maneesh