آموزش درون پرداخت گوگل پلی google play in app purchase

آموزش درون پرداخت گوگل پلی در اپلیکیشن اندروید.

در این مطلب بصورت مفصل و قدم به قدم به آموزش راه اندازی درون پرداخت گوگل پلی خواهیم پرداخت لطفا با ما همراه باشید.

برنامه نویسانی که اپلیکیشن خود را در گوگل پلی منتشر می کنند گاهی این درخواست را دارند که چطور باید درون پرداخت گوگل پلی را پیاده سازی نمایند.یک خبر خوب برایشان دارم

راه اندازی درون پرداخت گوگل بسیار ساده است بخصوص اگر قبلا درون پرداخت کافه بازار یا مایکت را راه اندازی کرده باشید

خیلی سریع می رویم سراغ آموزش ایجاد درون پرداخت گوگل پلی

1-نصب Google Play Billing Library یا دانلود مستقیم فایل های مورد نیاز :

ما برای راه اندازی درون پرداخت گوگل به چند فایل که توسط خودشان تهیه شده است نیاز داریم می توانیم به یکی از روش های زیر به دست بیاوریم:

Google Play Billing Library را از طریق Android SDK Manager  نصب کنید.

یا می توانید به جای آن این نمونه را دانلود کنید:

https://github.com/googlesamples/android-play-billing/tree/master/TrivialDrive

اگر روش اول را رفتید فایل های مورد نیاز در مسیر زیر هستند

sdk path>/extras/google/play_billing

قدم سوم : کپی کردن فایل های مورد نیاز به پروژه:

پروژه ی TrivialDrive را که به یکی از طروق بالا دانود کردید را باز کنید

و فایل IInAppBillingService.aidl  را از محل زیر

\TrivialDrive\src\com\android\vending\billing

به مسیر ی که در تصویر مشاهده می کنید در پروژه ی خود کپی کنید.بله احتمالا شما مسیر فوق را ندارید مسیر قرار گرفتن فایل aidl باید به شکل زیر باشد می توانید بصورت دستی بسازید:

آموزش قدم به قدم درون پرداخت گوگل پلی

 

در تصویر بالا می بینید که فایل IInAppBillingService.aidl   را در چه مسیری کپی کردم.

 

آموزش پرداخت درون برنامه ای گوگل

حالا نوبت کپی پوشه ی util می رسد . پروژه خودتان در اندروید استدیو باز باشد و پوشه ی util را از پروژه ی TrivialDrive  به مسیری که در زیر مشاهده می کنید کپی کنید:

آموزش قدم به قدم پرداخت درون برنامه ای

 

اگر بجای کپی به اندروید استدیو پوشه ی فوق را از طریق فایل منیجر به پوشه ی پروژه اضافه کنید دچار مشکل می شوید و باید نام پکیج ها را دستی تغییر بدهید اما وقتی به اندروید استدیو کپی می کنید نام پیکیج ها را عوض می کند و کار راحت تر است.

قدم سوم: مجوز پرداخت درون برنامه ای گوگل پلی را به اندروید مینقیست اضافه کنید.

مجوز زیر را به Manifest  پروژه اضافه کنید

<uses-permission android:name=”com.android.vending.BILLING” />

پروژه را کلین و دوباره بیلد کنید . اگر شما در پروژه ی فعلی درون پرداخت بازار یا مایکت را پیاده سازی کرده بودید تنها کاری لازم است انجام دهید کلاس هایی که خطا داده است را با ایمپورت کتابخانه های گوگل پلی اضلاح کنید و در مرحله ی که محصول را در گوگل پلی ساختید با محصول مارکت ایرانی جایگزین کنید. اگر هم قبلا پیاده سازی نکردید با هم پیش می رویم .

قدم چهارم: راه اندازی کلاس های لازم برای پرداخت درون برنامه ای گوگل پلی

مجتبی یگانه”  بطور مفصل درون پرداخت کافه بازار را در سایت خانه اندروید ایران (uncox.com) توضیح داده است . تنها تفاوت موجود فایل هایی بود که شما کپی کردید در واقع کافه بازار و مایکت  با کمی تغییر از فایل های اوپن سورس گوگل در درون پرداخت خود استفاده کرده اند شما می توانید آموزش ایشان را در اینجا دنبال کنید (لینک صفر تا صد دورن پرداخت بازار)

من درون پرداخت گوگل را با استفاده از آموزش ایشان پیاده سازی کردم که در زیر مشاهده می کنید:

کد صفحه اسپلش :

         QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {

            public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
                if ( !result.isFailure()) {
                    boolean state = inventory.hasPurchase(G.SKU_PREMIUM);
                    Log.i(G.TAG, "Bazaar say isPremiumUser is : " + state);
                    G.setPremiumState(state);
                }
                //goToNextActivity();
            }
        };
        G.prepareBazaarInAppBilling(true, mGotInventoryListener);

کلاس G  یک کلاسی بسازید که از اپلیکیشن اکستند شده باشد مثلا ما نام G را بر آن گذاشتیم :

     ////پرداخت بازار

    public static final Handler     HANDLER                = new Handler();
    public static final String      TAG                    = "TAG";                                                                                                                                                                                                                                                                                     //bazaar
    public static final String      SKU_PREMIUM            = "شناسه";                                                                                                                                                                                                                                                                              //bazaar
    public static final int         RC_REQUEST             = 0;                                                                                                                                                                                                                                                                                         //bazaar
    public static boolean           mIsPremium             = false;                                                                                                                                                                                                                                                                                     //bazaar
    public static IabHelper         mHelper;                                                                                                                                                                                                                                                  
                                                          //bazaar
    public static String            base64EncodedPublicKey = "کد طویل !";
    public static boolean           setPremiumState        ;
    public static boolean           premiumState           ;
    public static SharedPreferences preferences;


    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        context = getApplicationContext();
        preferences = PreferenceManager.getDefaultSharedPreferences(context);
        premiumState = preferences.getBoolean("IS_PREMIUM", false);


    }



    ////////////////////////////////////////////////پرداخت بازار/////////////////
    /////////////////////////////////////////////////////////////////////////////
    public static boolean prepareBazaarInAppBilling(final boolean requireUpdatePrefrences,
                                                    final QueryInventoryFinishedListener mGotInventoryListener) {
        try {
            mHelper = new IabHelper(G.context, base64EncodedPublicKey);
            Log.d(TAG, "Starting setup.");
            IabHelper.OnIabSetupFinishedListener listener =
                    new IabHelper.OnIabSetupFinishedListener() {

                        public void onIabSetupFinished(IabResult result) {
                            Log.d(TAG, "Setup finished.");
                            if ( !result.isSuccess()) {
                                Log.d(TAG, "Problem setting up In-app Billing: " + result);
                            }
                            if (requireUpdatePrefrences && mGotInventoryListener != null) {
                                mHelper.queryInventoryAsync(mGotInventoryListener);
                            }
                        }
                    };
            mHelper.startSetup(listener);
            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }


    ///////

    public static void setPremiumState(boolean state) {
        SharedPreferences.Editor editor = preferences.edit();
        editor.putBoolean("IS_PREMIUM", state);
        editor.commit();
        premiumState = state;
    }







}

کد صفحه پرداخت  :

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_payment);
        G.prepareBazaarInAppBilling(false, null);
        ImageView pay = (ImageView) findViewById(R.id.imgPay);
        pay.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                    try {
                        G.mHelper.launchPurchaseFlow(Payment.this,
                                G.SKU_PREMIUM, 0, mPurchaseFinishedListener);
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(G.context, "مشکلی در پرداخت کافه بازار بوجود آمد لطفا بعدا امتحان کنید ",
                                Toast.LENGTH_SHORT).show();
                    }
                }
        

            }
        });

    }

    ////////////////////////////////

    OnIabPurchaseFinishedListener mPurchaseFinishedListener =
                                                                    new OnIabPurchaseFinishedListener() {

                                                                        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
                                                                            if (result.isFailure()) {
                                                                                Log.d(G.TAG, "Error purchasing: " + result);
                                                                                Toast.makeText(G.context, "پرداخت انجام نشد لطفا مجددا سعی کنید", Toast.LENGTH_LONG).show();
                                                                                //G.setPremiumState(false);
                                                                                return;
                                                                            }
                                                                            else if (purchase.getSku().equals(G.SKU_PREMIUM)) {
                                                                                G.setPremiumState(true);
                                                                                Toast.makeText(G.context, " با تشکر نسخه کامل فعال شد یکبار برنامه را بسته دوباره اجرا کنید", Toast.LENGTH_LONG).show();
                                                                                finish();
                                                                            }
                                                                        }
                                                                    };





    ///////////////////این هم کدی که باید آخراکتیویتی پرداخت باشه////////////////
    /////////////////////////////////////////////////////////////////////////////
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if ( !G.mHelper.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        if (G.mHelper != null)
            G.mHelper.dispose();
        G.mHelper = null;
    }


}

خوب تمام شد حالا هر جایی خواستید می توانید چک کنید آیا پرداخت شده یا نه ، اگر پرداخت نشده بفرست به اکتیوتی پرداخت :

     if (G.premiumState) {// اگر پرداخت شد



                } else {// اگر پرداخت نشده بود

                    Toast.makeText(G.context, "لطفا نسخه کامل را تهیه فرمایید ", Toast.LENGTH_LONG).show();
                    Intent intent2 = new Intent(G.Curreantactivity, Payment.class);
                    G.Curreantactivity.startActivity(intent2);

                }

 

در کلاس G ما دو فیلد به نام های  SKU_PREMIUM
base64EncodedPublicKey  داشتیم مقدار این دو مورد بعد از آپلود یک نسخه به گوگل پلی قابل ایجاد می باشد

قدم پنجم: تنظیمات در پنل گوگل پلی دولوپر

کد نسخه ی اپلیکیشن را پایین تر بیاورید چون ممکن است نیاز باشد چند بار اپلیکیشن را در گوگل پلی آپلود کنید .

یک خروجی ساین شده از اپلیکیشن بگیرید.

به مسیر زیر بروید

http://play.google.com/apps/publish

یک اپلیکیشن جدید ایجاد کنید

آموزش قدم به قدم درون پرداخت گوگل

پس از ایجاد و آپلود اپلیکیشن در تنظیمات اپلیکیشن فوق به مسیر زیر بروید توجه داشته باشید نیازی به انتشار اپلیکیشن نیست .

در این مسیر Base64-encoded RSA public key  را کپی کنید این همان متغیری است که در کلاس G استفاده کردیم

 

سپس از مسیر زیر یک محصول بسازید:

آموزش انتشار اپلیکیشن در گوگل پلی

در واقع محصول هم همان SKU_PREMIUM است که در کلاس G استفاده کردیم . وقتی ساختید مقدار آن را جایگزین کنید.

کار تقریبا تمام است . یک خروجی جدید بگیرید و آپلود کنید . روش تست پرداخت درون برنامه ای گوگل با بازار فرق می کنید برای تست باید گروه کابران تست را ایجاد کنید .

موفق باشید

میکائیل عزتی کپی برداری از مطالب را حتی با ذکر منبع جایز نمی داند.

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *