آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در پرداخت درون برنامه ای :: در کلاس labHelper (حل شد)

احمد اسدی  10 سال پیش  7 سال پیش
+3 0

سلام دوستان گلم؛

سرچ کردم ولی متاسفانه به نتیجه ای نرسیدم

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

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

دقیقآ در همون خطی که دوستان اشاره کرده بودن:

 mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);

در StackOverFlow راهنمایی کردن که یه SetPackage رو اضافه کن، اضافش کردم و همون موقع مشکل حل شد، ولی دوباره دچار مشکل شده (جلل خالق)

کد اضافه شده:

 Intent serviceIntent = new Intent("ir.cafebazaar.pardakht.InAppBillingService.BIND"); 
serviceIntent.setPackage("com.farsitel.bazaar");

پیغام خطا:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.rrgc.telegram/ir.rrgc.telegram.ExtraOptions.premium.SpecialItemsActivity}: 
java.lang.SecurityException: Not allowed to bind to service Intent { act=ir.cafebazaar.pardakht.InAppBillingService.BIND }

 Caused by: java.lang.SecurityException: Not allowed to bind to service Intent { act=ir.cafebazaar.pardakht.InAppBillingService.BIND }

حالا جالبیش اینه که اگه یه بار برنامه بازار رو حذف کنم و دوباره نصب کنم، همه چه اوکی هستش و پرداخت صورت میگیره.

ممنون میشم راهنمایی بفرمایید. :)

ویرایش:

یک بار پِرمیشن رو حذف و دوباره جایگزین کردم فعلآ همه چی درست شد :| :| :|

 
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Javid  7 سال پیش
+4 0

این مشکل

Caused by: java.lang.SecurityException: Not allowed to bind to service Intent { act=ir.cafebazaar.pardakht.InAppBillingService.BIND }

رو من هم داشتم تا اینکه فهمیدم این کرش وقتی اتفاق میافته که برنامه شما قبل از بازار نصب شده باشه.

علت اون هم اینه که برای پرداخت درون برنامه ای باید مجوز دسترسی اون یعنی com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR (یا معادل اون برای مارکت های دیگه) رو توی مانیفست تعریف کنیم. وقتی برنامه رو با این مجوز نصب میکنیم، اگه هنگام نصب برنامه بازار نصب نباشه اون وقت این مجوز هم شناسایی نمیشه و نادیده گرفته میشه. حتی اگه بعد از این هم بازار رو روی دستگاه نصب کنیم، باز هم مجوز پرداخت درون برنامه ای در برنامه ما صادر نمیشه! (با تستی که من انجام دادم این طور بود) بنابراین تنها راه حذف برنامه و نصب مجدد اون هست.

از اون جایی که این مجوز پرداخت از نوع normal هست و خطرناک (dangerous) نیست، بنابراین نمیشه به صورت runtime و حین اجرای برنامه مجوز برنامه رو صادر کرد. پس تنها راهی که فعلا به ذهن میرسه گرفتن (catch) خطا و نمایش پیغام مرتبط به کاربر هست.

 try {
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {

        ...

        }
    });
} catch (Exception e) {
    e.printStackTrace();
    if (e instanceof SecurityException) {
        showPaymentPermissionDialog();
    } else {
        Toaster.longToast(mContext, R.string.inappbill_setup_failed);
    }
}

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