3

When I uploaded a new .apk to the Google Play store, it rejected my submission saying, "Your recent app submission was rejected for violating the Google Play Developer Program Policies. If you submitted an update, the previous version of your app is still live on Google Play.".

I got a mail stating :

We detected that at least one APK version in your recent upload isn’t using Android Pay correctly. Including APK version(s) 14 in your submission could cause your app to be rejected for violating our Payments policy.

If you’d like to use Android Pay in your app, please follow these steps:

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.

If you’d like to use another payment method in your app, please follow these steps to remove Android Pay from your manifest:

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.

Policy issue: Android Pay or other alternative payment mechanisms to Google Play’s in-app billing service are only permitted for the following:

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.

If you’ve reviewed the policy and feel this rejection may have been in error, please reach out to our policy support team. One of my colleagues will get back to you within 2 business days.

I appreciate your support of Google Play!

This is my Manifest (Updated) :

    <?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>

I am not using any code or features related to Android Pay.

I wrote back to Google, but got the same answer as mentioned in the first mail :

Thanks for contacting the Google Play team.

Your app was flagged for Android Pay because you've included the declaration for Android Pay in the manifest of your app:

Please create a new build of your application without this element in your manifest and you will no longer be flagged for the review

Please let us know if you have any other questions or concerns.

I went through the post here : Unable to upload new APK file to Android Play store (google pay) It mentions : "You have to exclude the google payment in the graddle build file if you are not using it." But I how do I do that?

This is my gradle build file :

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'
}
Community
  • 1
  • 1

2 Answers2

5

Instead of implement all play service like below:

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

use necessary services only such as below.

dependencies {
   compile 'com.google.android.gms:play-services-ads:7.5.0'
   compile 'com.google.android.gms:play-services-maps:7.5.0'
}
Zafer
  • 316
  • 4
  • 13
2

Look at your manifest - you have included the following line:

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

Which means that you have enabled Android Pay for your app. However, Google have identified that you are not trying to sell physical goods, which violates their policy.

If you're truly not trying to sell any physical goods (but only virtual ones), then follow their instruction and remove this line from your manifest:

Your app was flagged for Android Pay because you've included the declaration for Android Pay in the manifest of your app:

Please create a new build of your application without this element in your manifest and you will no longer be flagged for the review


EDIT: The problem is related to Google Play Services. Since you're using Google Play Services as a whole, you're also using the Wallet SDK which merges the wallet enabled permission into your manifest.

Best practice is to only pick and choose which SDKs you truly need, as shown here:

Replace the compile 'com.google.android.gms:play-services:7.5.0' only with the packages, required. In your case, ads, analytics and cast:

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'

Note that the base packages is a dependency and is brought automatically once you use any of the play services specific packages.

Ori Lentz
  • 3,668
  • 6
  • 22
  • 28
  • Hi, My original Manifest did not have this permission. That's when I got this mail. I followed the instructions at http://stackoverflow.com/questions/31616334/how-to-remove-specific-permission-when-build-android-app-with-gradle to remove the permission. I have now updated the Manifest in the post as well - removed this entry. With or without this line, my app still gets rejected with the same error. – user2778864 Apr 16 '16 at 05:05
  • First, I'd also add the `android:value="false"` to that tag. Second, it's happening because you are importing Google Wallet from the Play Services, because you seem to be bringing Google Play Services as a whole. That's not a good practice - it adds too many methods and constraints to your app. What you should do it only bring the packages from Google Play Services that you require, excluding Wallet of course. Which packages do you require? You can see how to take just the ones you need here: http://blog.safedk.com/technology/reducing-your-method-count-the-google-play-services-edition?ref=so – Ori Lentz Apr 16 '16 at 08:21
  • Hi, Thank a lot. You suggestions helped. Finally was able to upload the .apk. Here are the details for the reference of others reading the post : Adding android:value="false" did not have any impact. I have removed the line from my manifest. I went the link mentioned by Ori in the previous comment. I kept only base, ads and analytics packages. However, I got an "aapt" error highlighting an issue in a .png file. The issue was resolved by adding only the "cast" package (Even though I do not have any functionality related to "cast"). – user2778864 Apr 18 '16 at 05:09
  • Glad to hear! I'll edit my answer with the relevant information. – Ori Lentz Apr 18 '16 at 06:17