Ошибка метода onActivityResult Google в примере биллинга приложения (тривиальный диск)?
Пример оплаты в приложении Google com.example.android.trivialdrivesample.MainActivity содержит следующий код:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (mHelper == null) return;
// Pass on the activity result to the helper for handling
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(requestCode, resultCode, data);
}
else {
Log.d(TAG, "onActivityResult handled by IABUtil.");
}
}
Это кажется несколько опасным, потому что onActivityResult не будет работать должным образом до тех пор, пока mHelper не будет инициализирован. Казалось бы, лучше бросить if (mHelper == null) return
в пользу if (mHelper == null || !mHelper.handleActivityResult(requestCode, resultCode, data))
т.е.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (mHelper == null || !mHelper.handleActivityResult(requestCode, resultCode, data))
super.onActivityResult(requestCode, resultCode, data);
}
Оригинальный код действительно опасен? Или я неправильно понял?
2 ответа
Привет, я также работаю над InApp Purchase с 10 дней, и я успешно интегрировал в свое существующее приложение и готов сделать его живым. Первоначально, когда я начал это делать, я скачал отсюда пример оплаты Google InApp под названием "Trivial Drive".
Но это мне не сильно помогло, так как в нем много проблем и ошибок, поэтому я решил сделать это самостоятельно с нуля, используя новый API v3, который вы можете найти здесь. Это руководство имеет четкое объяснение, которое поможет вам, а также, если у вас есть время, посмотрите это видео на YouTube, где сотрудник Google четко объяснил, как его интегрировать.
Также, если вы хотите быстрый пример, у меня есть пример приложения, которое вы можете скачать здесь.
В следующем видео также объясняется, как интегрировать покупки InApp. Пожалуйста, пройдите.
Я полностью согласен. я думаю, что гораздо лучше сделать что-то вроде этого:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_RECOVER_PLAY_SERVICES) {
if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Google Play Services must be installed.", Toast.LENGTH_SHORT).show();
finish();
}
} else if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
// LOAD FROM CAMERA
ivf.LoadImage(tmpFilePath, quality, resolution, format);
} else if (requestCode == BUY_PREMIUM && resultCode == Activity.RESULT_OK) {
this.onPremiumPurchase();
} else if( requestCode == RC_REQUEST) {
if (mHelper == null) {
Toast.makeText(mContext, "mHelper is NULL", Toast.LENGTH_LONG).show();
return;
}
// Pass on the activity result to the helper for handling
mHelper.handleActivityResult(requestCode, resultCode, data);
}
}