Невозможно загрузить новый файл APK в магазин Android Play (разрешение Android Pay)

Когда я загрузил новый .apk в магазин Google Play, он отклонил мою заявку, сказав: «Ваша недавняя заявка на приложение была отклонена из-за нарушения правил программы для разработчиков Google Play. Если вы отправили обновление, предыдущая версия вашего приложения все еще работает. в Google Play».

Я получил письмо, в котором говорилось:

Мы обнаружили, что по крайней мере одна версия APK в вашей последней загрузке использует Android Pay некорректно. Включение APK версии 14 в вашу заявку может привести к тому, что ваше приложение будет отклонено из-за нарушения нашей политики платежей.

Если вы хотите использовать Android Pay в своем приложении, выполните следующие действия:

Remove any digital content from your app. To use Android Pay, your app must only sell physical goods or services.
Make sure your app is compliant with all policies listed in the Developer Program Policies. Remember that additional enforcement could occur if there are further policy issues with your apps.
Sign in to your Developer Console and submit the app. Make sure to increment the version number of the APK.

Если вы хотите использовать другой способ оплаты в своем приложении, выполните следующие действия, чтобы удалить Android Pay из манифеста:

Remove <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true"/> from your manifest.
Sign in to your Developer Console and submit the app. Make sure to increment the version number of the APK.

Проблема с политикой: Android Pay или другие механизмы оплаты, альтернативные сервису выставления счетов в приложении Google Play, разрешены только для следующего:

Android Pay
    For physical goods or services, such as movie tickets.

Other alternative payment mechanisms to Google Play’s in-app billing service
    For physical goods or services, such as movie tickets, or a publication where the price also includes a hard copy subscription.
    For digital goods that may be downloaded to devices and used outside of the app, such as songs that can be played on other music players.
    Donations to 527 designated tax exempt organizations are also permitted.

Если вы ознакомились с политикой и считаете, что отклонение могло быть ошибочным, обратитесь в нашу службу поддержки политик. Один из моих коллег свяжется с вами в течение 2 рабочих дней.

Я ценю вашу поддержку Google Play!

Это мой манифест (обновлено):

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.altergyan.appname" android:installLocation="auto" android:versionCode="15" android:versionName="@string/version">
        <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="com.android.vending.BILLING" />
        <uses-permission android:name="android.permission.STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <application
        android:name="com.altergyan.appname.Class_10"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:theme="@style/CustomActionBarTheme">
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_4"
            android:label="Category"
            android:parentActivityName="com.altergyan.appname.Class_20"
            android:windowSoftInputMode="stateHidden" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_20"
            android:label="@string/app_name"
            android:launchMode="singleTask" >
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_9"
            android:label="@string/title_activity_info"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_23"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            />
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_5"
            android:label="@string/favourites"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_22"
            android:label="@string/title_activity_settings">
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_13"
            android:label="@string/title_activity_agquizclass"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_15"
            android:label="@string/title_activity_agquizmap"
            android:parentActivityName="com.altergyan.appname.Class_13" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_13" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_17"
            android:label="@string/title_activity_quiz_play"
            android:parentActivityName="com.altergyan.appname.Class_15" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_15" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_16"
            android:label="@string/title_activity_quiz_options"
            android:parentActivityName="com.altergyan.appname.Class_15" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_15" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_19"
            android:label="@string/title_activity_record_phrase"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_7"
            android:label="@string/title_activity_flash_cards"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_2"
            android:label="@string/title_activity_alphabet"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_3"
            android:label="@string/title_activity_alphabet"
            android:parentActivityName="com.altergyan.appname.Class_20" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_20" />
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="com.altergyan.appname.Class_6"
            android:label="@string/title_activity_flash_cards"
            android:parentActivityName="com.altergyan.appname.Class_7" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.altergyan.appname.Class_7" />
        </activity>
        <activity
            android:name="com.flurry.android.FlurryFullscreenTakeoverActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
        </activity>
    </application>
</manifest>

Я не использую код или функции, связанные с Android Pay.

Я написал в Google, но получил тот же ответ, что и в первом письме:

Спасибо, что обратились к команде Google Play.

Ваше приложение было помечено для Android Pay, потому что вы включили декларацию для Android Pay в манифест своего приложения:

Пожалуйста, создайте новую сборку своего приложения без этого элемента в манифесте, и вы больше не будете помечены для проверки.

Пожалуйста, дайте нам знать, если у вас есть какие-либо другие вопросы или проблемы.

Я просмотрел сообщение здесь: Невозможно для загрузки нового APK-файла в магазин Android Play (Google Pay) В нем упоминается: «Вы должны исключить платеж Google в файле сборки Gradle, если вы его не используете». Но как мне это сделать?

Это мой файл сборки Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "xyz"
        minSdkVersion 16
         targetSdkVersion 17
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles 'proguard-android.txt'
        }
    }
}
dependencies { 
   compile 'com.android.support:appcompat-v7:19.1.0'
   compile files('libs/acra-4.5.0.jar')
   //compile files('libs/android-support-v13.jar')
   compile files('libs/FlurryAds-5.3.0.jar')
   compile files('libs/FlurryAnalytics-5.3.0.jar')
   compile files('libs/flurryAndroidDFPandAdMobMediationAdapter-5.0.0.r1.jar')
   compile 'com.android.support:support-v4:22.2.0'
   compile 'com.google.android.gms:play-services:7.5.0'
}

person user2778864    schedule 14.04.2016    source источник
comment
Не могли бы вы также поделиться своим манифестом?   -  person Ori Lentz    schedule 14.04.2016
comment
Я обновил пост с манифестом.   -  person user2778864    schedule 15.04.2016


Ответы (2)


Вместо реализации всего игрового сервиса, как показано ниже:

dependencies {
   compile 'com.google.android.gms:play-services:7.5.0'
}

используйте только необходимые услуги, такие как ниже.

dependencies {
   compile 'com.google.android.gms:play-services-ads:7.5.0'
   compile 'com.google.android.gms:play-services-maps:7.5.0'
}
person Zafer    schedule 18.04.2016

Посмотрите на свой манифест - вы включили следующую строку:

<uses-permission
     android:name="com.google.android.gms.wallet.api.enabled" 
     tools:node="remove"/>

Это означает, что вы включили Android Pay для своего приложения. Однако Google определил, что вы не пытаетесь продавать физические товары, что нарушает их политику.

Если вы действительно не пытаетесь продавать какие-либо физические товары (а только виртуальные), то следуйте их инструкциям и удалите эту строку из своего манифеста:

Ваше приложение было помечено для Android Pay, потому что вы включили декларацию для Android Pay в манифест своего приложения:

Пожалуйста, создайте новую сборку своего приложения без этого элемента в манифесте, и вы больше не будете помечены для проверки.


EDIT: проблема связана с сервисами Google Play. Поскольку вы используете Сервисы Google Play в целом, вы также используете Wallet SDK, который объединяет разрешение с включенным кошельком в ваш манифест.

Лучше всего выбирать только те SDK, которые вам действительно нужны, как показано здесь:

Замените compile 'com.google.android.gms:play-services:7.5.0' только нужными пакетами. В вашем случае реклама, аналитика и каст:

compile 'com.google.android.gms:play-services-ads:7.5.0'
compile 'com.google.android.gms:play-services-analytics:7.5.0'
compile 'com.google.android.gms:play-services-cast:7.5.0'

Обратите внимание, что базовые пакеты являются зависимостью и загружаются автоматически, как только вы используете какой-либо из конкретных пакетов игровых сервисов.

person Ori Lentz    schedule 15.04.2016
comment
Привет, у моего исходного манифеста не было этого разрешения. Вот когда я получил это письмо. Я следовал инструкциям на странице stackoverflow.com/questions/31616334/, чтобы удалить разрешение. Я также обновил манифест в сообщении - удалил эту запись. С этой строкой или без нее мое приложение все равно отклоняется с той же ошибкой. - person user2778864; 16.04.2016
comment
Во-первых, я бы также добавил android:value="false" к этому тегу. Во-вторых, это происходит из-за того, что вы импортируете Google Wallet из сервисов Play, потому что кажется, что вы переносите сервисы Google Play в целом. Это не очень хорошая практика — она добавляет слишком много методов и ограничений в ваше приложение. Что вы должны сделать, это принести только те пакеты из сервисов Google Play, которые вам нужны, за исключением, конечно, кошелька. Какие пакеты вам нужны? Вы можете узнать, как взять только те, которые вам нужны, здесь: blog.safedk.com/technology/ - person Ori Lentz; 16.04.2016
comment
Привет, большое спасибо. Ваши советы помогли. Наконец-то смог загрузить .apk. Вот подробности для справки других, читающих сообщение: Добавление android:value=false не оказало никакого влияния. Я удалил строку из моего манифеста. Я пошел по ссылке, упомянутой Ори в предыдущем комментарии. Оставил только базу, рекламу и пакеты аналитики. Однако я получил ошибку aapt, выделив проблему в файле .png. Проблема была решена добавлением только пакета cast (хотя у меня нет никаких функций, связанных с cast). - person user2778864; 18.04.2016
comment
Рад слышать! Я отредактирую свой ответ с соответствующей информацией. - person Ori Lentz; 18.04.2016