Quelle devrait être la charge utile du développeur dans la facturation de l'application Android v3 v3?

Je met en œuvre la facturation dans l'application dans mon application pour débloquer les fonctionnalités premium. La facturation dans l'application est configurée correctement. Tout semble bien, sauf la «charge utile du développeur».

L'exemple d'application dit

  • Comment supprimer la fenêtre de message Problèmes de rendu dans Intellij IDEA 13 aperçu de la mise en page
  • Gradle: Comment afficher les résultats d'AndroidTest dans la console?
  • Ajouter la barre d'outils de recherche sur la carte google comme dans l'application Android native
  • Comment vérifier si l'activité actuelle a un dialogue devant?
  • Paramétrage ListVoir la position de défilement bien dans Android
  • Installer le plugin ADT dans Eclipse
  • /* * TODO: verify that the developer payload of the purchase is correct. It will be * the same one that you sent when initiating the purchase. * * WARNING: Locally generating a random string when starting a purchase and * verifying it here might seem like a good approach, but this will fail in the * case where the user purchases an item on one device and then uses your app on * a different device, because on the other device you will not have access to the * random string you originally generated. * * So a good developer payload has these characteristics: * * 1. If two different users purchase an item, the payload is different between them, * so that one user's purchase can't be replayed to another user. * * 2. The payload must be such that you can verify it even when the app wasn't the * one who initiated the purchase flow (so that items purchased by the user on * one device work on other devices owned by the user). * * Using your own server to store and verify developer payloads across app * installations is recommended. */ 

    L'exemple d'application utilise une chaîne vide en tant que charge utile du développeur. Ma question est ce que la chaîne à utiliser comme charge utile du développeur? Puis-je utiliser l'ID principal de l'utilisateur?

    2 Solutions collect form web for “Quelle devrait être la charge utile du développeur dans la facturation de l'application Android v3 v3?”

    Veuillez vérifier la réponse ci-dessous, elle peut résoudre votre problème:

    Si vous utilisez un article consommable (article géré), vous pouvez utiliser une chaîne générée aléatoirement

    Étape 1: avant la méthode create, déclare ceci:

      private static final char[] symbols = new char[36]; static { for (int idx = 0; idx < 10; ++idx) symbols[idx] = (char) ('0' + idx); for (int idx = 10; idx < 36; ++idx) symbols[idx] = (char) ('a' + idx - 10); } 

    Étape 2: définissez la classe RandomString et SessionIdentifierGenerator dans votre activité

      public class RandomString { /* * static { for (int idx = 0; idx < 10; ++idx) symbols[idx] = (char) * ('0' + idx); for (int idx = 10; idx < 36; ++idx) symbols[idx] = * (char) ('a' + idx - 10); } */ private final Random random = new Random(); private final char[] buf; public RandomString(int length) { if (length < 1) throw new IllegalArgumentException("length < 1: " + length); buf = new char[length]; } public String nextString() { for (int idx = 0; idx < buf.length; ++idx) buf[idx] = symbols[random.nextInt(symbols.length)]; return new String(buf); } } public final class SessionIdentifierGenerator { private SecureRandom random = new SecureRandom(); public String nextSessionId() { return new BigInteger(130, random).toString(32); } } 

    Étape 3: passez la charge utile dans votre demande de puchase:

     RandomString randomString = new RandomString(36); System.out.println("RandomString>>>>" + randomString.nextString()); /* String payload = ""; */ // bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ String payload = randomString.nextString(); Log.e("Random generated Payload", ">>>>>" + payload); Log.d(TAG, "Launching purchase flow for infinite gas subscription."); mHelper.launchPurchaseFlow(this, SKU_GAS, IabHelper.ITEM_TYPE_INAPP, RC_REQUEST, mPurchaseFinishedListener, payload); 

    Pour plus d'informations, consultez ce lien: Token qui identifie l'utilisateur

    J'espère que cela résoudra votre problème.

    Pour moi, une chaîne aléatoire n'est pas utile d'abord, elle doit dépendre de l'utilisateur qui l'a acheté, et non du périphérique sur lequel il a été acheté. Deuxièmement, c'est un objet non consommable, donc une chaîne vide peut convenir, mais n'est pas idéale.

    Donc, ma façon de procéder est de créer un hachage crypté basé sur une clé. Chaque fois qu'un achat est effectué, il est uniquement identifiable car le hash ne doit jamais être le même.

    Étant donné que la clé est la même sur tous les appareils, il est facile de décrypter et de vérifier que le message secret est correct.

    Pour que la clé reste un secret, j'ai utilisé diverses fonctions de manipulation de chaînes pour le masquer afin de ne pas être stocké de manière visible.

    Un exemple de la mise à jour du texte peut être trouvé ici: Android In App Billing: sécurisation de la clé publique de l'application

    String Base64EncodedPublicKey key = DecrementEachletter("Bl4kgle") + GetMiddleBit() + ReverseString("D349824");

    Cette méthode de création d'un hash basé sur une clé permet à la charge utile d'être unique et identifiable, en même temps que raisonnablement sécurisée. Ce n'est pas à l'épreuve des balles, mais cela rend difficile de se fissurer.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.