web-dev-qa-db-fra.com

Achats intégrés avec plusieurs comptes

Je rencontre un problème avec dans les achats/abonnements d'application :

S'il y a plusieurs comptes sur l'appareil, je ne peux pas obtenir les achats effectués avec le deuxième compte. Cela peut parfois être résolu temporairement, en installant l'application à partir de l'interface Web de Google Play, mais après un certain temps, les achats n'apparaîtront pas dans la requête, obligeant l'utilisateur à réinstaller.

J'utilise les classes IabHelper de cet exemple .

En faisant des recherches sur Google, j'ai constaté que ce bogue existe depuis un certain temps, mais malheureusement je n'ai pas pu savoir si l'erreur se trouve dans les classes IabHelper ou du côté de Google.

Je voudrais attirer l'attention sur Google, afin qu'ils fournissent une solution appropriée pour cela, soit dans les classes IabHelper ou dans les services Play ou pour fournir des informations, comment cela doit être géré.

J'utilise le code dans une application avec (au moment de la rédaction) 900 000 installations d'utilisateurs actifs et je dois déclencher beaucoup de remboursements, pour cette raison.

S'il y a un correctif pour cela, que j'ai manqué, faites-le moi savoir.

Modifier: Parfois, il n'est pas du tout possible de récupérer les achats, même s'il n'y a qu'un seul compte sur le téléphone.

64
stefple

Il semble qu'il n'y ait pas de voie à sens unique pour résoudre ce problème, mais essayons de le faire.

  1. Lorsque l'utilisateur installe l'application pour la première fois, obtenez son e-mail principal ou tous les comptes sur l'appareil

  2. Demandez à l'utilisateur quel e-mail utilisera-t-il pour un futur paiement/ou quel compte est actif pour Google Play.

    vous pouvez utiliser ce code pour obtenir le compte

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
    Account[] accounts = AccountManager.get(context).getAccounts();
    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            String possibleEmail = account.name;
            ...
        }
    }
    

    N'oubliez pas de demander la permission

    <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
    

    Une fois que l'utilisateur a sélectionné l'e-mail, vous pouvez envoyer un lien par e-mail pour confirmer cette adresse e-mail

  3. Dirigez tous les paiements vers cet e-mail spécifique.

Méthode 2

Utilisez le nouvel avenir "Envoyer et recevoir de l'argent avec Gmail"

  1. Créez une intention d'e-mail et envoyez des données spécifiques à l'intention d'e-mail et effectuez des paiements.

  2. En cas de succès, envoyez un code à l'email de l'utilisateur

  3. Utilisez le code pour activer ce qu'ils achètent.

Méthode

Utilisez une autre bibliothèque ou passerelle de paiement pour votre achat via l'application au lieu de Google Play.

1
Lucien Mendela

J'ai deux comptes, mais un ne fonctionne pas. Ce que j'ai fait, c'est que je suis entré dans les paramètres d'Android, puis dans les préférences du compte. J'ai changé mon compte principal de celui qui ne fonctionne pas à celui qui fonctionne. Ensuite, j'ai attribué le nouveau compte comme étant le principal pour toutes mes applications, y compris Google Play. Cela a fonctionné pour moi. Parfois, si cela ne fonctionne pas pour une raison quelconque, vous pouvez également vous connecter et accéder au Google Play Store à partir d'Internet.

0

Essayez d'obtenir dup ... dupliquez un point avec une signature de fichier se terminant par .apk ou .xcode

0
Python Pro

J'avais rencontré le même problème quelques mois plus tard. Après des heures à trouver des solutions et tout ce que j'ai trouvé, c'est de travailler sur quelque chose comme ça,

Vous pouvez utiliser OAuth 2.0.

Mais vous devez également le gérer depuis votre backend. Je ne suis pas un développeur backend, donc je ne savais pas exactement comment cela se fait dans le backend mais côté application, j'ai fait quelque chose comme ça,

Vous pouvez utiliser le premier compte Google permettant l'authentification de votre côté serveur. OAuth 2.0 est un outil qui simplifie et permet aux développeurs de permettre aux utilisateurs d'accéder facilement à votre application. La classe OAuthHmacSigner gère l'authentification.

signer = new OAuthHmacSigner();
signer.clientSharedSecret = Constants.CONSUMER_SECRET;

Ensuite, l'activité Android utilise le code suivant pour lancer le flux OAuth:

launchOauth.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent().setClass(v.getContext(),
            PrepareRequestTokenActivity.class));
    }
});

Pour obtenir un jeton d'accès OAuth 2.0, il vous suffit d'appeler:

AccountManager.getAuthToken()

J'espère que cela pourrait aider :)

0
Hardik Chauhan