Aujourd'hui, j'ai reçu un rejet de Google pour mon application Facetocall Votre application ne semble pas inviter l'utilisateur à être un gestionnaire par défaut avant de demander les autorisations associées comme l'exige la stratégie.
Veuillez apporter les modifications nécessaires afin de vous conformer à la politique
exigences et renvoyez votre application via un formulaire de déclaration. La fonctionnalité de gestionnaire par défaut a été répertoriée sur votre formulaire de déclaration, mais votre application n'a pas de capacité de gestionnaire par défaut. Mon objectif est de créer une application de numérotation par défaut. Voici mon manifeste Et voici ce que je fais quand mon application se lance: Que me manque-t-il ici? J'ai réessayé de soumettre le formulaire et cette fois j'ajoute un vidéo qui montre mon application sur un émulateur (je vois le même comportement sur tous les appareils réels aussi) voici la réponse que j'ai récupéré:
private void checkDefaultHandler() {
if (isAlreadyDefaultDialer()) {
return;
}
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);
}
else{
throw new RuntimeException("Default phone functionality not found");
}
}
private boolean isAlreadyDefaultDialer() {
TelecomManager telecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
return getPackageName().equals(telecomManager.getDefaultDialerPackage());
}
<?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.gazman.beep"
android:installLocation="preferExternal">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.SEND_SMS" />
... and other permissions
<application
android:name=".application.BeepApp"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".system_intents.IntentsActivity"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.Transparent">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
<activity
android:name=".call.CallActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:showForAllUsers="true" />
<service
android:name="com.gazman.beep.call.MyInCallService"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data
android:name="android.telecom.IN_CALL_SERVICE_UI"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService" />
</intent-filter>
</service>
... And other declarations
</application>
</manifest>
3 Réponses :
Vous n'avez pas besoin de paniquer. Ce type de conversation a également eu lieu avec moi, concernant le contenu AdMob de mon application. J'ai tout déclaré parfaitement, mais ils disaient toujours que la classification du contenu n'était pas correcte en raison du type d'annonces que mon application diffusait. Lorsque plus de mails échangés, ils m'ont envoyé une capture d'écran avec la preuve de mauvaises publicités, alors j'ai finalement vérifié à nouveau tout mon code et j'ai trouvé mon erreur.
Le fait est que Google est doué dans ce qu'il fait, et s'ils le disent, alors votre application manque de quelque chose.
Pour être très honnête, votre application a fait ne demandez nulle part à l'utilisateur de l'autoriser à être défini par défaut, mais il se définit par défaut en arrière-plan. Vous devez demander toutes les autorisations requises par votre application qui sont essentielles et peuvent être utilisées par n'importe quelle application, virus ou logiciel espion pour interférer avec la confidentialité des utilisateurs .
Vous pouvez le faire avec une fonction comme dans l'exemple suivant, qui demande l'autorisation de l'appareil photo à l'utilisateur:
private void requestCameraPermission() { Log.i(TAG, "CAMERA permission has NOT been granted. Requesting permission."); // BEGIN_INCLUDE(camera_permission_request) if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // For example if the user has previously denied the permission. Log.i(TAG, "Displaying camera permission rationale to provide additional context."); Snackbar.make(mLayout, R.string.permission_camera_rationale, Snackbar.LENGTH_INDEFINITE) .setAction(R.string.ok, new View.OnClickListener() { @Override public void onClick(View view) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA); } }) .show(); } else { // Camera permission has not been granted yet. Request it directly. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA); } // END_INCLUDE(camera_permission_request) }
Vous pouvez voir le référentiel complet sur Google Samples
Et ne vous inquiétez pas. Si vous corrigez ce problème, ils accepteront votre candidature, comme ils l'ont fait pour la mienne.
"Pour être très honnête, vos applications n'ont demandé à aucun utilisateur de l'autoriser à être défini par défaut" Comment avez-vous enrichi cette conclusion? Pourquoi dites-vous des applications alors qu'il n'y a qu'une seule application dont je parle? Et dans quelle mesure l'autorisation de la caméra est-elle pertinente pour la nouvelle politique?
Eh bien, le code que vous publiez ne contenait aucune requête de l'utilisateur final, c'est pourquoi. Il devrait être dans votre fonction checkdefaulthandler avant de commencer toute intention
Le fait est que Google est bon dans ce qu'il fait, et s'ils le disent, alors votre application manque de quelque chose.
enfin pas toujours ;-)
au cas où quelqu'un viendrait traverser ce message. . . J'ai utilisé ceci pour demander à l'utilisateur de changer le dailer par défaut. Sachez qu'il va y avoir 2 fenêtres d'invite (pour moi c'était bien).
private void setDefaultDialer() { AlertDialog.Builder builder; builder = new AlertDialog.Builder(this); builder.setMessage("Do you want to make Cricket your default Dialer?(it will not cover or replace your dialer)") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { defaultDialerPackage = "cricket"; Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER); startActivityForResult(intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,getPackageName()),REQUEST_CODE_SET_DEFAULT_DIALER); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); Toast.makeText(getApplicationContext(),"Cancelled - No action was taken", Toast.LENGTH_SHORT).show(); } }); AlertDialog alert = builder.create(); alert.setTitle("Cricket need default dialer permission!!"); alert.show();
}
pour créer une application de numérotation par défaut, vous devez faire 2 choses:
1. ajoutez les autorisations suivantes dans votre manifeste Android
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_layout) ... checkDefaultDialer() ... } const val REQUEST_CODE_SET_DEFAULT_DIALER=200 private fun checkDefaultDialer() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager val isAlreadyDefaultDialer = packageName == telecomManager.defaultDialerPackage if (isAlreadyDefaultDialer) return val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER) .putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName) startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { when (requestCode) { REQUEST_CODE_SET_DEFAULT_DIALER -> checkSetDefaultDialerResult(resultCode) } } private fun checkSetDefaultDialerResult(resultCode: Int) { val message = when (resultCode) { RESULT_OK -> "User accepted request to become default dialer" RESULT_CANCELED -> "User declined request to become default dialer" else -> "Unexpected result code $resultCode" } Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
<activity> <intent-filter> <action android:name="android.intent.action.DIAL"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Pouvez-vous me dire exactement ce que vous avez fait?
Google a récemment annoncé qu'une application ne devrait pas demander l'autorisation SMS ou l'autorisation du journal des appels s'il ne s'agit pas d'une application SMS ou APPEL par défaut. Il l'a fait pour des raisons de sécurité. Trouvez un lien vers l'article ici support.google.com/googleplay/android-developer / answer / 90473 03 . À mon avis, parce que vous voulez vous comporter comme une application d'appel par défaut et utiliser les autorisations sensibles ci-dessus, vous devez dire à l'utilisateur pourquoi vous avez besoin de ces autorisations et pourquoi il devrait vous autoriser à l'aide du dialogue avant de lancer le < code> startActivityForResult (intent, REQUEST_CODE_SET_DEFAULT_DIALER) .
@AbhishekMadan au lien que vous m'avez envoyé, cliquez sur: Utilisations autorisées des autorisations SMS et du journal des appels, cela montrera mon cas d'utilisation.
Si vous pensez que votre application répond aux exigences du règlement pour une utilisation acceptable ou qu'elle est éligible à une exception, envoyez un formulaire de déclaration d'autorisation dès que possible pour que Google Play l'examine. Vous serez averti si votre demande a été approuvée. Vous n'avez pas besoin d'avoir mis en œuvre les modifications de l'APK pour envoyer le formulaire de déclaration.
. Donc, je pense que vous devez simplement soumettre le formulaire de déclaration comme on dit.Oui je l'ai fait et j'ai eu un rejet comme mentionné dans la question
Ce qu'ils disent, c'est que votre application doit être le gestionnaire par défaut avant de demander et d'utiliser les autorisations. Le point est ce que l'application fait avant d'appeler
isAlreadyDefaultDialer ()
. Demandez-vous ou utilisez-vous les autorisations avant d'être le gestionnaire par défaut?@EasyJoinDev Non, je ne le fais pas. Regardez la vidéo ou téléchargez mon application et vous verrez par vous-même.
@IlyaGazman Alors ils ont tort. Nous parlons de la nouvelle procédure de reddit, rejoignez-nous redd.it/ak68l2
@IlyaGazman pouvez-vous partager quelques conseils sur la façon de passer l'examen? J'ai déjà essayé de nombreuses soumissions avec toutes les descriptions mais toujours sans succès :(
Avez-vous trouvé une solution?