Ответ 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
Надеюсь, это поможет вам.