onIabPchachaseFinished কখনও কল করা হয়নি।


111

আমি আমার প্রথম অ্যাপ্লিকেশনটির জন্য অ্যাপ্লিকেশন বিলিং সেট আপ করার চেষ্টা করছি এবং android.test.purchased স্কু ব্যবহার করে যাচ্ছি। ক্রয়ের মধ্য দিয়ে আসে, এবং আমি এসকিউকে আমার তালিকাতে নিয়ে যেতে পরিচালিত করি, তবে শিরোনাম অনুসারে, onababchachaFinished, কখনও বলা হয় না।

আমি মনে করি এই লগটির সাথে এর কিছু থাকতে পারে: "কোন দৃষ্টিভঙ্গির ফোকাস রয়েছে তা সংরক্ষণ করা যায়নি কারণ ফোকাস করা ভিউ com.android.intern.policy.impl.PhoneWindow$DecorView@406743d0 এর কোনও আইডি নেই"। গুগল প্লেতে যাওয়ার ঠিক আগে এটি পপ আপ হয়। আমি যদিও নিশ্চিত এর অর্থ কি না ...

ক্রয় চালু হচ্ছে:

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


    }
};

আমার সম্ভবত এটি যুক্ত করা উচিত যে আমি এটি কোনও ট্যাবের মধ্যে থেকে করার চেষ্টা করছি
এএএটন

আমি প্রোগ্রামটিমে আইডি সেট করেছি, তবে কোনও পার্থক্য নেই।
এএটোন

উত্তর:


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
এছাড়াও আমাকে সাহায্য করেছেন, ধন্যবাদ। @ স্পাইডার, আপনার ক্রিয়াকলাপে আপনার এই পদ্ধতির প্রয়োজন কারণ হ'ল অন্যথায় এমহেল্পারের হ্যান্ডেলঅ্যাক্টিভিটিস রেজাল্ট () পদ্ধতিটি কল করা হবে না। অন্য কথায়, এটি হ'ল ক্রিয়াকলাপে প্রয়োজনীয় আসল / স্ট্যান্ডার্ড হ্যান্ডেলঅ্যাক্টিভিটি রেজাল্ট () এবং এমহেল্পার আসলে একটি নিয়মিত পুরানো পদ্ধতি।
gcl1

8
এর জন্য ধন্যবাদ. । যা আপনার কার্যকলাপ রয়েছে onActivityResult (কল হবে) এটি সমাপ্ত যখন -। এটি ডকুমেন্টেশনে একটি বাগ (তারা কখনই এই বা IabHelper IabHelper এর launchPurchaseFlow মধ্যে (প্রয়োজন উল্লেখ) startIntentSenderForResult ডাকে এর
জেরি ব্র্যাডি

3
আমি ভেবেছিলাম যখন আমি এটি পেয়েছি তখন আমি আমার সমস্যার সমাধান করেছি ... তখন আমি বুঝতে পারি যে আমি ইতিমধ্যে এই ফাংশনটি প্রয়োগ করেছি এবং এটি এখনও কার্যকর হয় না ... দীর্ঘশ্বাস
ম্যাট কে

3
নোট করুন যে কোনও খণ্ডে অ্যাক্টিভিটি রিসাল্ট () -কে ওভাররাইড করা কাজ করে না, এটি অবশ্যই একটি ক্রিয়াকলাপে করা উচিত
cprcrack

8

আমি সবেমাত্র অন্য একটি গুরুত্বপূর্ণ জিনিসটি সন্ধান করেছি: ক্রয়ের প্রবাহ চালু করতে যে অনুরোধকোড ব্যবহার করা হচ্ছে তা> = 0 হতে হবে!

আমি একটি এলোমেলো অনুরোধ কোড তৈরি করতে "নতুন র্যান্ডম ()। পরবর্তী (আইটেম)" ব্যবহার করেছি এবং কখনও কখনও এটি কাজ করে, কখনও কখনও তা করেনি। এখন আমি নিম্নলিখিত ডকুমেন্টেশনে সন্ধান করেছি, যে অনুরোধকোডটি একটি নেতিবাচক সংখ্যা হওয়া উচিত নয়:

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


3

আমার একই সমস্যা ছিল এবং onctivityResult কেও বলা হয়নি called @ গোলামের জবাব
থেকে অনুপ্রাণিত হয়ে আমি বুঝতে পেরেছি যে ক্রিয়াকলাপের ক্রিয়াকলাপটিঅ্যাক্টিভিটিস রিসাল্টটি খণ্ডটির অনলাইনঅ্যাক্টিভিটি রেজাল্টটি স্বয়ংক্রিয়ভাবে কল করে না তাই আমাকে নিজেই এটি করতে হয়েছিল।

@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

আপনাকে অ্যাক্টিভিটিআরসাল্ট () এ সুরক্ষিত শূন্যতার কল করতে হবে; মেইনএ্যাকটিভিটির (তুচ্ছ ড্রাইভ) পরিবর্তে আপনার পিতামাতার ক্রিয়াকলাপে আপনি কোথা থেকে আপনার মেইনএকটিভিটিটিকে তুচ্ছ ড্রাইভ ক্রিয়াকলাপ বলছেন।

অন্যথায় যদি 0 টি কেনা সফল হয় তবে আপনি ফলাফলকোড মান -1 পাবেন।


0

আমি একই সমস্যার মুখোমুখি হয়েছি এবং স্বীকৃত সমাধানটি ইতিমধ্যে কার্যকর করা হয়েছে তবে এটি কী কারণে ঘটছে তা বলতে পারেনি। নতুন গুগল প্লে বিলিং লাইব্রেরি 1.0 এ সরানো (19 সেপ্টেম্বর 2017 এ প্রকাশিত) আমার জন্য সমস্যাটি স্থির করেছে!

আমি আশা করি নিম্নলিখিত লিঙ্কগুলি এমন কাউকে সহায়তা করবে যারা নতুন গ্রন্থাগারটি প্রয়োগ করতে চান:

মুক্তির বিষয়ে গুগলের ব্লগ পোস্ট

গুগলের ইউটিউব ভিডিও

বিলিং লাইব্রেরি প্রশিক্ষণ ক্লাস খেলুন

গুগলের তুচ্ছ ড্রাইভ ভি 2 নমুনা

গুগল আই / ও 2017 এর মধ্যে প্রকাশিত বিলিং লাইব্রেরির কোডল্যাব খেলুন

বিলিং লাইব্রেরি ডক্স খেলুন

ক্লাস এবং পদ্ধতিগুলির জন্য সরকারী রেফারেন্স

নোট প্রকাশ করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.