Ошибка метода 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. Пожалуйста, пройдите.

https://www.youtube.com/watch?v=-h2ESH71hAI

Я полностью согласен. я думаю, что гораздо лучше сделать что-то вроде этого:

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

    }
Другие вопросы по тегам