Токен, который идентифицирует пользователя

Я разрабатываю приложение для Android и хочу, чтобы некоторые функции приложения были бесплатными.

Я думал использовать API-интерфейс Billing версии 3 для приложений, поэтому я определил "продукт для приложений" в консоли разработчика.

После прочтения документации я знаю, что когда я начинаю процесс покупки, я должен передать строковый токен, который помогает приложению однозначно идентифицировать пользователя, совершившего покупку.

Но как я могу получить токен, который идентифицирует пользователя?

Спасибо

Ответ 1

вы можете использовать полезную нагрузку разработчика для идентификации пользователя и безопасности.

существует два способа генерации полезной нагрузки разработчика в соответствии с вашим приложением в требовании биллинга приложений.

1), если вы используете неуправляемый элемент (не потребляемый элемент), вы можете просто использовать UserID, который уникально идентифицирует пользователя, в частности ваше приложение. вы можете отправить полезную нагрузку разработчика как UserID.

или

вы можете поместить адрес электронной почты в полезную нагрузку разработчика для уникального идентификатора, если у вас есть идентификатор электронной почты пользователя, хранящийся на сервере. когда вы получаете ответ от игры Google после того, как пользователь заплатил за продукт, а затем извлеките его из базы данных сервера этой учетной записи пользователя, сравните свою полезную нагрузку разработчика.

Локальная база данных (например, SQLite):

     UserID
     (Automatecally  
       generated by   product type     userEmailAddress
      Sql database)        


        1            product1            [email protected]
        2            product1            [email protected]
        3            product1            [email protected]

Либо вы можете передать его на полезную нагрузку, как userID

- > это создаст проблему некоторое время. если вы не хотите идти с серверной базой данных, тогда вы можете просто проигнорировать разработку полезной нагрузки, сделав ее пустой строкой, и это не повлияет на ваш код намного больше. Посмотрите эту ссылку Николая Еленкова: stackoverflow.com/questions/14553515/

2), если вы используете расходный элемент (управляемый элемент), вы можете использовать произвольную сгенерированную строку

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

Шаг 2: установите класс RandomString и SessionIdentifierGenerator в своей деятельности.

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

    }

шаг 3: передать полезную нагрузку в ваш запрос 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

Обратите внимание:

Рекомендация по безопасности:. Когда вы получаете ответ от покупки в Google Play, обязательно проверьте полученную подпись данных,   orderId и строку разработчикаPayload в объекте Purchase   убедитесь, что вы получаете ожидаемые значения. Вы должны проверить   что orderId является уникальным значением, которое вы ранее не использовали   обрабатывается, а строка разработчикаPayload соответствует токену, который вы   отправлено ранее с запросом на покупку. В качестве дополнительной безопасности   предосторожности, вы должны выполнить проверку самостоятельно   сервер.

   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

Надеюсь, это поможет вам.

Ответ 2

Почему вы не создаете UUID для каждого пользователя?

String uniqueID = UUID.randomUUID().toString();