Saturday, May 4, 2024
HomeGame DevelopmentReplace to Billing Library 4(sdkbox) - Third-Celebration

Replace to Billing Library 4(sdkbox) – Third-Celebration


Hello @chuoihottieu, are you certain you haven’t modified anything in your replace? Out of your logs it’s onerous to say what’s going on.

@bluewind00 Thanks for sharing, it’s a superb “base” for the long run enhancements. Please make it public once more :slight_smile:


@PCCSOARES
@kds

Thanks.
I make it public the repository once more.
Once more, it is a pattern and isn’t assured to work.



2 Likes

hello @kds @bluewind00
i exchange sdkbox::IAP with mingos::IAP observe the directions, it’s work perfert on system help native arm64-v8a, however crash on armeabi-v7a with out cause.
for instance Samsung Galaxy A13 5G: ABI help: armeabi-v7a, armeabi.
In any case thanks you guys atleast i upgraded to billing v4 earlier than 1.11.2022!

chuoihottieu
Simply exchange
PROP_APP_ABI=arm64-v8a
with
PROP_APP_ABI=armeabi-v7a:arm64-v8a
in ‘proj.androidgradle.properties’

bluewind00, thanks very a lot lots (you might be our hero); I’ve up to date your code a bit, to get amount of bought merchandise; it really works even on Android 4.4.2. (debug and launch)

…Now I’ll attempt to insert it into my venture (appears not really easy).

These are recordsdata that may be copied immediately into your venture.

C++:

Courses/frequent/JsonParser.cpp
Courses/frequent/JsonParser.h
Courses/dropbox/json11/json11.cpp
Courses/dropbox/json11/json11.hpp
Courses/iap/MingosIAP.h
Courses/platform/android/Java_iap_PurchaseEventListener.cpp
Courses/platform/android/MingosIAP.cpp

Java:

proj.android/app/src/iap/Product.java
proj.android/app/src/iap/PurchaseEventListener.java
proj.android/app/src/iap/PurchaseManager.java

Subsequent is a set of recordsdata that will battle together with your venture’s code.
Please incorporate the required components of your venture.

proj.android/app/src/org/cocos2dx/cpp/AppActivity.java
proj.android/construct.gradle
proj.android/app/construct.gradle
proj.android/app/proguard-rules.professional



2 Likes

After two days of crashes and black screens, eventually appears I used you code. It was onerous (for me), as a result of:

  1. I used separate object (in my c++ code):

sdkbox::IAP::setListener(m_IAP_obj); // m_IAP_obj class extends : sdkbox::IAPListener

And you utilize the primary class for the listener (object) :

class SampleScene : public cocos2d::Scene, public mingos::IAPEventListener { // your code
class HelloWorld : public cocos2d::Layer // my previous code

  1. Additionally there are tiny distinction in:

proj.androidappsrcorgcocos2dxcppAppActivity.java
:
public class AppActivity extends Cocos2dxActivity { // your code
public class AppActivity extends com.sdkbox.plugin.SDKBoxActivity { // my code

mPurchaseManager = new PurchaseManager(this); // is it doable to alter this file to make use of as listener not AppActivity class (object), however one thing else?

Thanks on your nice job! :slight_smile: Due to you, possibly our Cocos video games might be alive for some extra time.



1 Like

It is a essential level, however with a view to create your individual buy course of, you need to go away the sdkbox.
This implies making use of the next code to AppActivity.

public class AppActivity extends Cocos2dxActivity { 

In case you apply my code as it’s beneath, you’ll not obtain the notification after the acquisition request with my code.
It’s because SDKBoxActivity will obtain the results of the method from the shop.

public class AppActivity extends com.sdkbox.plugin.SDKBoxActivity 

In different phrases, leaving the code above will not be an choice for us.

mPurchaseManager = new PurchaseManager(this); // is it doable to alter this file to make use of as listener not AppActivity class (object), however one thing else?

Are you saying you wish to reduce adjustments to AppActivity?
Then you are able to do that by making PurcahaseManager a singleton.
If the intent of this query is to maintain the next code as defined earlier, it is not sensible.

public class AppActivity extends com.sdkbox.plugin.SDKBoxActivity 

I’ve modified PurcahseManager to singleton in my newest code.



1 Like

Hello @bluewind00 ,

Thanks on your nice job. You have got saved my venture :smiley:

For many who get mingos::IAP to work by putting in the sport from Android Studio, nevertheless it crashes for those who set up it from APK… DON’T FORGET TO ADD THESE LINES TO YOUR proguard-rules.professional:

-keep class iap.** { ; }
-dontwarn iap.
*

:person_facepalming:



1 Like

simply replace lately one in every of my video games to billing library 4, with this pattern and it’s working nice.
the one odd factor, is that typically I get these crashes:

Crashed: Thread: SIGSEGV  0x0000000000000000
#00 computer 0x175f30  (std::__ndk1::__function::__func<Java_iap_PurchaseEventListener_onInitialized::$_1, std::__ndk1::allocator<Java_iap_PurchaseEventListener_onInitialized::$_1>, void ()>::operator()() [Java_iap_PurchaseEventListener.cpp:76])
#01 computer 0x40ec34 (cocos2d::Scheduler::replace(float) [functional:1867])
#02 computer 0x3f7d0c (cocos2d::Director::drawScene() [CCDirector.cpp:264])
#03 computer 0x3fa14c (cocos2d::Director::mainLoop() [CCDirector.cpp:1392])

line 76 is:

listener->onInitialized(success);

unsure if we must always add a attempt catch there for the case of the listener not being current anymore…
or possibly its one thing else. any concepts?

I’m very grateful on your generosity in releasing this code. Does anybody have any ideas on one of the simplest ways to utilize it inside a lua-based app?

I’m pondering both hack the lua wrappers which might be provided with sdkbox, or create a alternative sdkbox:IAP class that calls into this new code the place doable and stubs something that isn’t supported. I’m not sure what’s finest although, so considering what others with extra expertise with Android assume.

Hmmm, I’m clearly not as good as I hoped I used to be! :slight_smile: I’m struggling to know the way to make use of this in an present cocos2d-x venture, of both kind – cpp or lua. I imagined if I stared on the directions for lengthy sufficient that it could grow to be clear, nevertheless it’s not occurring. This seems to be to be a standalone pattern. So, is there a simple solution to decide precisely which recordsdata have to be copied into an present venture and which recordsdata inside the present venture want tweaking?

Sorry, ignore me: I can now see that extra detailed directions seem on this thread.

sdkbox’s implementation doesn’t appear to incorporate an acknowledge methodology. Is that as a result of acknowledging was dealt with mechanically internally to the library? With the brand new code, can we now must acknowledge purchaces?

acknowledge appears to be a brand new API that appeared in v4.
Since sdkbox solely handles as much as Google Play Billing Library v3, acknowledge doesn’t exist within the first place.

After receiving a purchase order completion response from Google Play, you need to subject a request to Google Play akin to the kind of merchandise.

Consumable merchandise => devour
Non-consumable merchandise => acknowledge

Within the pattern code, the next half corresponds to this

// Courses/scene/SampleScene.cpp
void SampleScene::onPurchaseSuccess(const mingos::Product& product) {
    CCLOG("SampleScene::onPurchaseSuccess: product=%s", product.toJson().dump().c_str());

    if(product.kind == mingos::IAP_Type::CONSUMABLE) {
        mingos::IAP::devour(product.id);
    } else if (product.kind == mingos::IAP_Type::NON_CONSUMABLE) {
        mingos::IAP::acknowledge(product.id);
    }

    ...
}

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments