2 Domanda: Token che identifica l'utente

domanda creata a Thu, Jun 20, 2013 12:00 AM

Sto sviluppando un'applicazione Android e vorrei che alcune funzionalità dell'applicazione non fossero gratuite.

Ho pensato di utilizzare l'API di fatturazione in-app versione 3, quindi ho definito un "prodotto in-app" nella console degli sviluppatori.

Dopo aver letto la documentazione, so che quando avvierò il flusso di acquisto dovrei passare un token di stringa che aiuti l'applicazione a identificare in modo univoco l'utente che ha effettuato l'acquisto.

Ma come posso ottenere un token di stringa che identifica l'utente?

Grazie

    
13
  1. controlla la mia risposta di seguito.
    2013-06-20 05: 35: 35Z
2 risposte                              2                         

puoi utilizzare payload dello sviluppatore per identificare l'utente e per la sicurezza.

Ci sono due modi per generare il payload degli sviluppatori in base alla tua applicazione nei requisiti di fatturazione delle app.

1) se si utilizza un elemento non gestito (non un articolo di consumo), è possibile utilizzare semplicemente ID utente che identifica in modo univoco l'utente, in particolare l'app. puoi inviare payload dello sviluppatore come ID utente.

o

puoi inserire l'indirizzo email nel payload dello sviluppatore per l'ID univoco se l'ID e-mail dell'utente è memorizzato nel server. quando ricevi risposta da Google Play dopo che l'utente ha pagato il prodotto, quindi preleva dal database del server di quell'account utente, corrisponde al payload dello sviluppatore.

Database locale (come SQLite):

 
     UserID
     (Automatecally  
       generated by   product type     userEmailAddress
      Sql database)        


        1            product1            abc@gmail.com
        2            product1            xyz@gmail.com
        3            product1            pqr@gmail.com

O puoi passarlo sul payload come ID utente

- > creerà un problema un po 'di tempo. se non vuoi andare con il database del server, puoi semplicemente ignorare lo sviluppo del payload rendendolo come una stringa vuota che non avrà alcun effetto sul tuo codice molto altro.chiedi questo link di Nikolay Elenkov answer: stackoverflow.com/questions/14553515 /

2) se si utilizza un oggetto consumabile (oggetto gestito), allora si può usare una stringa generata a caso

 
step 1: before on create method declare this:

            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);
        }

passaggio 2: imposta la classe RandomString e SessionIdentifierGenerator nella tua attività

 
    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);
        }

    }

passaggio 3: passa il carico utile nella tua richiesta 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);

    for more inforamation check this link:
    http://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string

Prendi nota di questo:

  
    

Raccomandazione sulla sicurezza: quando ricevi la risposta all'acquisto da Google Play, assicurati di controllare la firma dei dati restituiti,     orderId e la stringa developerPayload nell'oggetto Purchase su     assicurati di ottenere i valori attesi. Dovresti verificare     che orderId è un valore unico che non hai precedentemente     elaborato, e la stringa developerPayload corrisponde al token che tu     inviato in precedenza con la richiesta di acquisto. Come ulteriore sicurezza     precauzione, è necessario eseguire la verifica sulla propria sicurezza     server.

  
 
   check this link:
   http://developer.android.com/google/play/billing/billing_integrate.html
 
for more details check this link:

http://developer.android.com/google/play/billing/billing_best_practices.html

Spero ti possa aiutare.

    
19
2013-07-03 05: 43: 15Z
  1. Grazie per la tua risposta. Non sono molto sicuro se ti ho capito. Il mio prodotto non è consumabile in quanto consente solo l'accesso ad alcune funzionalità dell'applicazione. Solo gli utenti che acquistano il prodotto saranno in grado di accedere a questa funzionalità dell'applicazione e potranno accedervi per sempre, quindi non si tratta di un prodotto di consumo. La documentazione di Google dice: "Per gli articoli consumabili, puoi usare una stringa generata casualmente, ma per gli articoli non consumabili dovresti usare una stringa che identifica in modo univoco l'utente."
    2013-06-20 09: 22: 20Z
  2. Quello che ho capito sugli articoli non consumabili è che il payload deve includere una stringa che identifica in modo univoco l'utente, e questo per me è qualcosa di simile a un indirizzo email. Hai scritto su UserId, ma non so cosa sia esattamente questo. Come posso ottenere UserId per includerlo nel payload? Grazie
    2013-06-20 09: 22: 53Z
  3. controlla la mia risposta modificataer sopra. puoi passare l'indirizzo Email o l'ID utente (che verrà generato automaticamente nel database locale) come payload per sviluppatori.
    2013-06-20 10: 28: 39Z
  4. Ok, supponiamo che io usi l'e-mail come identificativo utente. Cosa succede se due utenti diversi utilizzano lo stesso account nei loro dispositivi? Solo l'utente "X" ha acquistato l'applicazione, quindi ha lasciato che l'altro utente "Y" utilizzi il suo account nel suo dispositivo. L'utente "Y" può accedere al funcionality che l'utente "X" ha comprato?
    2013-06-20 10: 50: 51Z
  5. Questo non dà una risposta. La domanda era "come ottenere una stringa per identificare l'utente". Nella risposta c'è un sacco di codice senza un modo per ottenere l'utente. Viene segnalato genericamente solo "UserID" o "indirizzo email"
    2017-02-15 16: 12: 06Z

Perché non crei un UUID per ciascun utente?

 
String uniqueID = UUID.randomUUID().toString();
    
- 1
2013-06-19 17: 26: 25Z
  1. penso che creerebbe problemi se un utente utilizza l'app su più dispositivi.
    2014-02-21 07: 39: 01Z
fonte posta Qui