onIabPurchaseFinished ไม่เคยโทร.


111

ฉันพยายามตั้งค่าการเรียกเก็บเงินในแอปสำหรับแอปแรกของฉันและใช้ sku android.test.purchased การซื้อเกิดขึ้นและฉันจัดการเพื่อรับ SKU เข้าสู่สินค้าคงคลังของฉัน แต่อย่างที่ชื่อบอกว่า onIabPurchaseFinished ไม่เคยถูกเรียก

ฉันคิดว่ามันอาจเกี่ยวข้องกับบันทึกนี้: "ไม่สามารถบันทึกได้ว่ามุมมองใดมีโฟกัสเนื่องจากมุมมองที่โฟกัส com.android.internal.policy.impl.PhoneWindow$DecorView@406743d0 ไม่มี id" ที่ปรากฏขึ้นก่อนที่จะไปที่ Google Play ฉันไม่แน่ใจจริงๆว่ามันหมายถึงอะไร ...

เปิดตัวการซื้อ:

mHelper.launchPurchaseFlow(this, sku, 10001, mPurchaseFinishedListener, "");

และผู้ฟัง:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {

    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase info) {
        System.out.println("Purchase Finish heard something");

        if (result.isFailure()) {
             Log.d(TAG, "Error purchasing: " + result);
             return;
        } else{
                Log.d(TAG,"Success!");
             }


    }
};

ฉันควรจะเพิ่มว่าฉันกำลังพยายามทำสิ่งนี้จากในแท็บ
AAAton

ฉันได้ตั้งค่า id โดยทางโปรแกรมแล้ว แต่ไม่มีความแตกต่าง
AAAton

คำตอบ:


206

ลองเพิ่มสิ่งนี้ในกิจกรรมที่เรียกmHelper.launchPurchaseFlow(..):

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);

    // 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.");
    }
}

16
มีปัญหาเดียวกันและทำงานได้สมบูรณ์แบบ แต่สิ่งที่ฉันอยากรู้คือทำไมการโทรกลับไม่ถูกดำเนินการอย่างที่คิดทำไมเราต้องโทรไปหาตัวตนของเราด้วย? ชนิดทำให้การโทรกลับไร้ประโยชน์: /
แมงมุม

4
ยังช่วยฉันด้วยขอบคุณ @Spider เหตุผลที่คุณต้องใช้เมธอดนี้ในกิจกรรมของคุณคือมิฉะนั้นเมธอด handleActivityResult () ของ mHelper จะไม่ถูกเรียก กล่าวอีกนัยหนึ่งนี่คือ handleActivityResult () จริง / มาตรฐานที่จำเป็นในกิจกรรมและ mHelper's เป็นเพียงวิธีการเก่า ๆ ทั่วไป
gcl1

8
ขอบคุณสำหรับสิ่งนี้. มันเป็นข้อบกพร่องในเอกสาร (พวกเขาไม่เคยพูดถึงว่าต้องการสิ่งนี้หรือใน IabHelper LaunchPurchaseFlow () ของ IabHelper เรียก startIntentSenderForResult ซึ่งจะเรียกกิจกรรมของคุณว่า onActivityResult () เมื่อเสร็จสิ้น
Jerry Brady

3
ฉันคิดว่าฉันได้แก้ปัญหาของฉันแล้วเมื่อฉันพบสิ่งนี้ ... จากนั้นฉันก็รู้ว่าฉันได้ใช้งานฟังก์ชั่นนี้แล้ว แต่ก็ยังใช้ไม่ได้ ... ถอนหายใจ
Matt K

3
โปรดทราบว่าการแทนที่ onActivityResult () บน Fragment จะไม่ได้ผลต้องทำในกิจกรรม
cprcrack

8

ฉันเพิ่งค้นพบสิ่งสำคัญอีกอย่าง: requestCode ที่ใช้ในการเปิดขั้นตอนการซื้อจะต้องเป็น> = 0!

ฉันใช้ "new Random (). nextInt ()" เพื่อสร้าง requestCode แบบสุ่มและบางครั้งก็ใช้งานได้บางครั้งก็ไม่ได้ ตอนนี้ฉันพบในเอกสารประกอบต่อไปนี้ว่า requestCode ไม่ควรเป็นจำนวนลบ:

http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29


3

ฉันมีปัญหาเดียวกันและonActivityResultก็ไม่ถูกเรียกเช่นกัน
ได้รับแรงบันดาลใจจากคำตอบของ @ Ghulamฉันตระหนักว่ากิจกรรมonActivityResultไม่ได้เรียกส่วนของonActivityResultโดยอัตโนมัติดังนั้นฉันจึงต้องทำด้วยตนเอง

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(mCurrentFragment!= null){
            mCurrentFragment.onActivityResult(requestCode, resultCode, data);
        }
    }

ในกรณีของฉันคำตอบนี้ได้ผล แต่ฉันต้องเพิ่มการแทนที่ OnActivityResult ในกิจกรรมหลักของฉัน ( github.com/onepf/OpenIAB/issues/166 )
PayToPwn

1

คุณต้องเรียกโมฆะที่ได้รับการป้องกัน onActivityResult (); ในกิจกรรมหลักของคุณแทนที่จะเป็น MainActivity (Trivial Drive) โดยที่คุณเรียก MainActivity ของคุณว่า Trivial Drive Activity

คุณจะได้รับค่ารหัสผลลัพธ์ -1 หากซื้อสำเร็จมิฉะนั้นจะเป็น 0


0

ฉันประสบปัญหาเดียวกันและวิธีแก้ปัญหาที่ยอมรับได้ถูกนำไปใช้แล้ว แต่ไม่สามารถบอกได้ว่าอะไรเป็นสาเหตุของปัญหานี้ การย้ายไปที่Google Play Billing Library 1.0 ใหม่ (เผยแพร่เมื่อวันที่ 19 กันยายน 2017) ได้แก้ไขปัญหาให้ฉันแล้ว!

ฉันหวังว่าลิงก์ต่อไปนี้จะช่วยให้ผู้ที่ต้องการใช้ไลบรารีใหม่:

บล็อกโพสต์ของ Google เกี่ยวกับการเปิดตัว

วิดีโอ youtube ของ Google

เล่นคลาสฝึกอบรมห้องสมุดการเรียกเก็บเงิน

ตัวอย่าง Trivial Drive v2 ของ Google

Play Billing Library codelab ที่เผยแพร่ในช่วง Google I / O 2017

เล่นเอกสาร Billing Library

การอ้างอิงอย่างเป็นทางการสำหรับคลาสและวิธีการ

เผยแพร่บันทึก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.