رفتن به مطلب

محمدرضا شاهپیری

مدیر کل سایت
  • تعداد ارسال ها

    4,060
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    773

پست ها ارسال شده توسط محمدرضا شاهپیری

  1. ۳۵ دقیقه قبل، farsroom گفته است:

    ببخشید اشتباه شد

    میخواستم این رو بنویسم

    poolakey.purchaseProduct("coin_100","test")

    باید کلمه test در دیتابیس بازار نمایش داده شود

    ولی کلمه inapp نمایش داده میشود

    با تشکر فراوان

    من مجددا تست کردم همچین مشکلی وجود نداره و مقدار payload درست ذخیره میشه

    image.png

    • پسندیدن 1
  2. ۱ ساعت قبل، Forutan گفته است:

    مهندس پیاده سازیشو متوجه نیستم

    میشه لطف کنید نمونه بدید چون جایی دیگه هم ندیدم واسه کتابخانه شما

    اما AmirRecycler سمپل داشت که من اونو تهیه نکردم و کتابخانه شمارو دارم

    پیاده سازی خاصی نداره. شما یه gridview دارین که مثلا 3 تا ستون داره میخواین شامل عکس و ویدئو. میخواین ویدئو دوبرابر عکس باشه.

    Private Sub EventName_getSpanSize(position as int) as int
     dim item as Item=items.get(position)
     if item.isVideo then return 2 else return 1
    End Sub

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

    • پسندیدن 1
  3. ۲ دقیقه قبل، farsroom گفته است:

    به جای poolakey شناسه کالا را قرار دادم

    خب اشتباه شما همین جاس.تابع init برای راه اندازی هست و متغیر دوم eventName هست نه payload

    تابع خرید به شکل زیر هست و اینجا متغیر دوم payload هست

     

    	poolakey.purchaseProduct("product_id","payload")

     

  4. ۱۴ ساعت قبل، Forutan گفته است:

    سلام مهندس وقت بخیر

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

    سلام و درود. باید از spanSize استفاده کنید متد زیر رو پیاده کنید مثلا اگه سه ردیف دارین حداکثر مقدار خروجی 3 هست که میشه کل صفحه.

    Private Sub EventName_getSpanSize(position as int) as int
    
    End Sub

     

    • پسندیدن 1
  5. در ۱۴۰۲/۹/۱۷ در 11:37، farsroom گفته است:

    سلام

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

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

            Request.ProductId ="test"
            Request.Payload = "hello"

            Poolakey.PurchaseProduct("Purchase",Request)

     

    ولی داخل سایت بازار مقدار developerPayload را که باید hello نماید دهد شکل زیر بر میگراند و نمیشود متن مورد نظر را نوشت

    "developerPayload": "inapp"

    Untitled.jpg

    سلام و درود. من متوجه مشکل نشدم دوستان. من تو پنل بازار خودم نگاه میکنم مشکلی نمیبینم و مقدار payload عینا ذخیره میشه. مسیر رو چجوری دارین میرین؟

  6. ۱۱ ساعت قبل، farsroom گفته است:

    لینک های موجود کار نمیکنه و میگه :

    "متاسفانه ما مطلبی را که شما به دنبال آن هستید را پیدا نکردیم"

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

    • پسندیدن 1
  7. ۱۰ ساعت قبل، mohammad-alone گفته است:

    مجدداْ‌ سپاسگزارم
    کتابخونه های پرداخت بازار و مایکت رو میشه از کلاس فراخونی کرد ؟
    چون یه دیالوگی باز میکنه اون دیالوگ که در قالب فکر میکنم اینتنت هم باشه مشکل ساز نیست ؟

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

    اول یه کلاس به اسم Payment ایجاد کنید

    Sub Class_Globals
    	Private poolakey As Poolakey
    	Private myketBill As MyketBilling
    	Private eventName As String="billing"
    	Private publicKey As String="......."
    	Private market As String
    	Private connected As Boolean=False
    	Private module As Object
    End Sub
    
    Public Sub Initialize(mMarket As String,mModule As Object)
    market=mMarket
    module=mModule
    If market="bazaar" Then
    	    setupPoolakey
    	Else
    		setupMyket
    End If
    End Sub
    
    Private Sub setupPoolakey
    	poolakey.init(publicKey,eventName)
    	poolakey.connect
    End Sub
    
    Private Sub setupMyket
    	myketBill.initialize(eventName,publicKey)
    End Sub
    
    Public Sub purchase(productId As String,payload As String)
    	If connected==False Then
    		ToastMessageShow("ارتباط با مارکت برقرار نشد",False)
    		Return
    	End If
    	If market="bazaar" Then
    		    poolakey.purchaseProduct(productId,payload)
    		Else
    			myketBill.launchPurchaseFlow(productId,payload)
    	End If
    End Sub
    
    
    Private Sub billing_connectionSucceed
    	connected=True
    End Sub
    Private Sub billing_onIabSetupFinished(result As IabResult)
    	connected = result.isSuccessful
    End Sub
    
    Private Sub billing_purchaseSucceed(purchaseInfo As PurchaseInfo)
    	CallSubDelayed3(module,"handlePurchase",True,purchaseInfo.purchaseToken)
    End Sub
    Private Sub billing_purchaseFailed(error As String)
    	CallSubDelayed3(module,"handlePurchase",False,Null)
    End Sub
    Private Sub billing_onIabPurchaseFinished(r As IabResult,p As Purchase)
    	CallSubDelayed3(module,"handlePurchase",r.isSuccessful,p.Token)
    End Sub

    حالا کافیه توی اکتیویتی به شکل زیر استفاده کنید

    Dim paymant As Payment
    paymant.Initialize("bazaar",Me)
    paymant.purchase("productId","payload")
    
    Public Sub handlePurchase(success As Boolean,token As String)
    	
    End Sub

     

    • پسندیدن 1
  8. ۶ ساعت قبل، mohammad-alone گفته است:


    میشه از کلاس هم فراخونی کرد توابع پرداخت رو ؟
    مشکلی بوجود نمیاد ؟

    اصولا وقتی اینجور سیستمی دارین که چند نوع مختلف از یک عملیات یکسان رو توش انجام میدین (مثلا پرداخت درون برنامه ای دوتا مارکت متفاوت) باید یه کلاس واسط بنویسید و توش متدهای و ایونتهای پرداخت رو پیاده کنید و شما فقط با این کلاس باید حرف بزنید و مهم نباشه چه مارکتی استفاده میکنید

    6 ساعت قبل، mohammad-alone گفته است:

    حال دلم خوش نیست چون حال مردمم خوش نیست

    خوب میشه حال دل مردم بالاخره عزیز. روزها و دوران سخت تر از این هم بوده و رفته. این روزام میگذره...

  9. ۲ ساعت قبل، mohammad-alone گفته است:

    ضمن تشکر بابت کتابخانه خیلی خوبتون با وجودی که بازار خودش SDK رو در گیت منتشر کرده ولی من همچنان از کتابخانه شما استفاده می‌کنم
    امروز به یک مشکلی برخورد کردم :
    وقتی همزمان از کتابخونه پولکی شما و پرداخت درون برنامه ای مایکت شما، استفاده میکنم‌ خطای زیر موقع کامپایل صادر میشه
    حقیقت حوصله تیک زدن و کامنت کردن کدها رو ندارم دیگه سنم قد نمیده و اعصابم نمیکشه ممنون میشم راهنمایی بفرمائید.

    سلام ودرود. سن یه عدده عزیز دلت باید جوون باشه:smiley4:

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

  10. ۷ ساعت قبل، yare۳۱۳ yare۳۱۳ گفته است:

    سلام وقتی کتابخانه  persiafastNetwork و OkhttpUtils2 با هم فعال میشن اختلال ایجاد میشه.

    آیا میشه این اختلال رو درست کرد؟

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

    اما در مورد سوال بله کافیه از فایل xml کتابخونه okhttputils  وابستگی okhttp رو حذف کنید

     

  11. در ۱۴۰۲/۸/۳ در ۲۰:۰۰، مهدی عزیزی گفته است:

    سلام

    منم همین مشکل رو دارم

     

    در ۱۴۰۲/۸/۳ در ۲۱:۱۱، سید رضا گفته است:

    متاسفانه من چندین روزه پرسیدم کسی پاسخگو نیست 

    سلام و درود. پست ویرایش شد و سورس هم جهت راحتی کار پیوست شد.

  12. 4 ساعت قبل، سید رضا گفته است:

     

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

    سورس رو بدون هیچ تغییری رو یه گوشی دیگه هم تست کنید و ایمیل معتبر وارد وارد کنید ببینید چی میشه. در صورت امکان فایل apk رو بزارید که من تست کنم

  13. 7 ساعت قبل، سید رضا گفته است:

    اینم گیج کنندس چون آموزش ویدیویی مرتبط به این رو نگذاشتید لطفا اگر میشه برای php بالا یه سمپل بزارید برای شما 10 دقیقه هم زمان نمیبره ممنون میشم که ما هم بتونیم استفاده کنیم لطف میکنید

    اگه نیاز بود توضیح میدادیم. تو سورس توکن هست و کار میکنه و سورس رو ران کنید میتونید استفاده کنید. صرفا اگه بخواید با توکن شخصی کار کنید نیازه مراحل بالا رو طی کنید. آموزشهای لازم برای کتابخونه چه متنی و چه تصویری موجوده.  شما اگه php داشتین که با کتاخونه های دیگه کار میکرده با این هم کار میکنه. لطفا ادامه سوالات در مورد مشکلات و مسائل مربوط به کتابخونه باشه نه آموزش php یا موارد دیگه. موفق باشید.

  14. ۱ ساعت قبل، سید رضا گفته است:

    لطفا پس یه توضیح دمورد سورس retrofit_source_v1_publicApi بدید من نتونستم باهاش از سایتش که توکن گرفتم کار کنم

    وارد سایت زیر بشید و لاگین کنید.

    https://gorest.co.in/consumer/login

    مطابق صفحه زیر توکن رو بگیرید

    Screenshot 2023-10-23 231021.png

    توکن رو طبق شکل زیر جایگزین کنید توی کلاس PrRetrofit و متد retrofit_intercept دقت کنید توکن باید همراه Bearer و یه فاصله باشه دقیقا مطابق سورس.

    Screenshot 2023-10-23 231349.png

    دیگه نباید مشکلی باشه

  15. 5 ساعت قبل، سید رضا گفته است:

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

    من فعلا وقت نمیکنم دوست عزیز تا آخر ماه شاید سرم خلوت شه. تو نت سرچ کنید آموزش زیاد هست. 

  16. ۲۸ دقیقه قبل، سید رضا گفته است:

    سلام استاد ای کاش آموزش ها رو با php  و دیتابیس بزارید چون که ما هاست پایتون و جنگو نداریم اکثرا اشتراکی هستیم ممنون

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

    اگه خودتون بلد نیستید حتما به یه api نویس و وب کار بدین بنویسه

    • پسندیدن 1
  17. ۲۱ دقیقه قبل، سید رضا گفته است:

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

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

    درمورد اتصال به اینترنت هم تو انجمن تاپیک زیاد هست در موردش جستجو کنید پیدا میکنید

    • پسندیدن 1
  18. در ۱۴۰۲/۷/۲۴ در ۱۷:۳۳، fun_code گفته است:

    سلام استاد

    وقتتون بخیر

    مجددا تشکر میکنم بابت کتابخانه خوبتون.

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

    ممنون

     

    به جواب سوالم رسیدم ، چون کلاس kotlin.jvm.internal.Intrinsics رو پیدا نمیکنه  اپلیکیشن کرش میشه.

    بله دوست عزیز. کرش میکنه. این کلاسها نیاز هست برای کتابخونه

    • تشکر 1
  19. سلام و درود. امیدوارم حالتون خوب باشه

    از بین چهار کامپوننت اصلی اندروید رسیورها یکی از مهمترینهاش هست. از اونها برای اسال رویداد بین برنامه ها و یا بین خود کامپوننتها استفاده میشه. همینطور برای دریافت اعلانهای سیستمی مثل اس ام اس یا تماس ازشون استفاده میشه. این قابلیت جدیدا به صورت نیتیو به b4a اضافه شده هر چند کامل این کار رو نکرده:aggressive:. بریم که ببینیم به چه شکل باید استفاده کنیم.

    اول از منوی Project->Add New Module->Receiver Module یه رسیور مثلا به نام TestReceiver ایجاد میکنیم.

    Sub Process_Globals
    	
    End Sub
    
    Private Sub Receiver_Receive (FirstTime As Boolean, StartingIntent As Intent)
    	Log(StartingIntent.Action)
    End Sub

    به طور کلی به دو صورت میتونیم رسیورها رو توی اندروید ثبت کنیم.

    1- از طریق منیفست یا استاتیک:

    یکی از روشهای ثبت رسیور از طریق منیفست هست. البته این روش برای اکثر اعلانها تو نسخه های جدید اندروید غیر فعال شده.

    مثلا میخوایم بوت شدن دستگاه رو بفهمیم. به منیفست کدهای زیر رو اضافه میکنیم.

    AddPermission(android.permission.RECEIVE_BOOT_COMPLETED)
    AddReceiverText(TestReceiver, <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>)

    2-از طریق کدنویسی یا داینامیک:

    اینجا رو دیگه ارل یادش رفته و براش راه حلی نزاشته. ولی ما که نمیزاریم چیزی لنگ بمونه :gamer2: این روش روش پیشنهادی و استاندارد گوگل هست.

    کدهای زیر رو به اکتیوتی یا سرویس اضافه کنید اضافه کنید.

    #If java
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.IntentFilter;
    import android.os.Build;
    import java.lang.reflect.Constructor;
    
    
    public void registerReceiver(Object receiverClass, String[] actions) throws Exception{
            IntentFilter intentFilter=new IntentFilter();
            for (String action:actions) {
                intentFilter.addAction(action);
            }
            String className=receiverClass.toString().replace("class ","");
            Class<?> clazz = Class.forName(className);
            Constructor<?> cons = clazz.getConstructor();
            cons.setAccessible(true);
            final BroadcastReceiver receiver =(BroadcastReceiver) cons.newInstance();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                registerReceiver(receiver,intentFilter,Context.RECEIVER_EXPORTED);
            }else {
                registerReceiver(receiver,intentFilter);
            }
        }
    
    public void unregisterReceiver(Object receiverClass)  throws Exception{
            String className=receiverClass.toString().replace("class ","");
            Class<?> clazz = Class.forName(className);
            Constructor<?> cons = clazz.getConstructor();
            cons.setAccessible(true);
            BroadcastReceiver receiver =(BroadcastReceiver) cons.newInstance();
            unregisterReceiver(receiver);
        }	
    #End If

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

    Dim jo As JavaObject
    jo.InitializeContext.RunMethod("registerReceiver",Array(TestReceiver,Array As String("android.intent.action.TIME_TICK")))

    این مواردی که تا الان عرض شد برای اعلانهای سیستمی هست، اما یکی از مهمترین قابلیتهای رسیور اینه که ما میتونیم رسیور دلخواه خودمونو هم ثبت کنیم که خب خیلی کاربردی هست.

    مثلا میخوایم یه اعلان با اکشن com.action.TEST ثبت کنیم. به صورت زیر ثبتش میکنیم

    Dim jo As JavaObject
    jo.InitializeContext.RunMethod("registerReceiver",Array(TestReceiver,Array As String("com.action.TEST")))

    و حالا برای صدا زدن اعلان به شکل زیر عمل میکنیم. اول کتابخونه phone رو تیک میزنیم.

    Dim phone As Phone
    Dim i As Intent
    i.Initialize("com.action.TEST","")
    i.PutExtra("key","value")
    phone.SendBroadcastIntent(i)

    حتما توجه داشته باشین که بعد از استفاده اونو unregister کنید.به شکل زیر

    Dim jo As JavaObject
    jo.InitializeContext.RunMethod("unregisterReceiver",Array(TestReceiver,Null))

    سورس هم پیوست شد

    receiver.zip

    مانا باشید:hi:

    • پسندیدن 5
  20. ۵ ساعت قبل، batman۱۲۳ گفته است:

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

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

    عزیز من تست کردم هیچ مشکلی نداره.

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

    https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip

    https://www.b4x.com/android/files/resources_11_22.zip

    • تشکر 1
  21. با سلام خدمت عزیزان برنامه نویس:hi:

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

    برسیم سراغ کتابخونه :gamer2:

    Retrofit یک کتابخانه‌ی فوقلاده قوی اندرویدی برای کار با وب سرویس هستش. به خاطر استفاده از annotation و interface خیلی سریع راه اندازی میشه و امکانات خیلی زیادی بهتون میده. خب دیگه چونه بسسه بریم سراغ آموزش.:music:

    1: راه اندازی

    Dim pRetrofit As PersianRetrofit
    pRetrofit.Initialize("retrofit").baseUrl("http://192.168.129.115:8000/").addConverterFactory _ 
    	.addInterceptor.addAuthenticator.build
    • متد   addConverterFactory برای تبدیل کلاس جاوا به جیسون هست. به راحتی میتونید کلاس بفرستید به سرور
    • متد addInterceptor  برای اینه که بخواین به صورت اتوماتیک به همه ریکوئستها یه کانفیگ رو ست کنید. مثلا میخواین تو همه ریکوئستها هدر Authorization بفرستید. به شکل زیر میشه
    Private Sub retrofit_intercept(request As Request)
    	request.addHeader("Authorization","Bearer "&accessToken)
    End Sub
    • متد addAuthenticator برای احراز هویت هست و به طور کلی برای رفرش کردن توکن هست. زمانی که ارور 401 (Unauthorized) متد زیر اجرا میشه و شما باید توکن جدید بگیرید و به ریکوئست پاس بدید
      
      Private Sub retrofit_authenticate As Map
      	Dim token As String= getAccessToken(uc.RefreshToken)
      	Dim map As Map
      	map.Initialize
      	map.Put("Authorization","Bearer "&token)
      	Return map
      End Sub

       

    2: استفاده از متدها

    به طور کلی برای ارسال درخواست یک کلاس از نوع RequestBuilder باید ساخته بشه و به شکل زیر راه اندازی بشه

    • GET
    Dim queries As Map:queries.Initialize
    queries.Put("key1","value1")
    Dim requestBuilder As RequestBuilder
    requestBuilder.setMethod(requestBuilder.GET) _
    .setEndpoint("public/v2/users").setQueries(queries)
    • POST
    Dim user As User
    user.Initialize
    user.username=username
    user.password=password
    Dim requestBuilder As RequestBuilder
    requestBuilder.setMethod(requestBuilder.POST).setBody(user).setEndpoint("api/token/")
    • MULTIPART
    Dim imbl As List
    imbl.Initialize
    imbl.Add(MultipartUtils.createPartBody("file","image.png",image))
    Dim bm As Map
    bm.Initialize
    bm.Put("content",MultipartUtils.creteStringBody("image from persian retrofit"))
    Dim requestBuilder As RequestBuilder
    requestBuilder.setMethod(requestBuilder.MULTIPART).setEndpoint("api/upload_image/") _
    .setMultipartParts(imbl).setMultipartParams(bm)

    3: اجرای درخواست

    برای ارسال و اجرای درخواست به دوصورت میتونیم عمل کنیم

    1: Async (اجرا در نخ جداگانه)

    pRetrofit.enqueue(requestBuilder,"login")
    Wait For retrofit_onResponse(response As Response)
    	If response.isSuccessful Then
    		    Dim body As String=response.body
    			Dim JSON As JSONParser
    			JSON.Initialize(body)
    			Dim resp As Map= JSON.NextObject
    			Log(resp.Get("access"))
    	Else
                Log(response.error)
    	End If

    2: Sync (اجرا در نخ اصلی یا همون main )

    Dim response As Response=pRetrofit.execute(requestBuilder)
    	If response.isSuccessful Then
    		Dim body As String=response.body
    		Dim JSON As JSONParser
    		JSON.Initialize(body)
    		Dim resp As Map= JSON.NextObject
    	   Log(resp.Get("access"))
    	Else
    		Log(response.error)
    	End If

     

    آموزش تصویری

    1:آموزش کتابخانه PersianRetrofit قسمت ۱ (مقدماتی)

    https://www.youtube.com/watch?v=t7VrsePFSmU

    --------------------------------------------------------------------------------------------------------

    2:آموزش کتابخانه PersianRetrofit قسمت ۲ (مقدماتی)

    https://www.youtube.com/watch?v=6_i4myiSM1s

    --------------------------------------------------------------------------------------------------------

    3:آموزش کتابخانه PersianRetrofit قسمت ۳(احراز هویت خودکار)

    https://www.youtube.com/watch?v=YxqCFRS0e1o

    --------------------------------------------------------------------------------------------------------

    4:آموزش کتابخانه PersianRetrofit قسمت ۴(دانلود)

    https://www.youtube.com/watch?v=gUfPSHSRDO0

    --------------------------------------------------------------------------------------------------------

    5:آموزش کتابخانه PersianRetrofit قسمت ۵(آپلود)

    https://www.youtube.com/watch?v=W5W6WZikDHs

     

    تمام:yes:

    Have fun:drinks:

     

    • پسندیدن 6
    • تشکر 3
  22. ۴ ساعت قبل، Salam Naz گفته است:

    سلام

     

    داداش یه مشکلی هست

    با دستور زیر برای پرداخت دستور می‌فرستم👇

    ‏myketBilling.launchSubscriptionPurchaseFlow(sku,payload)

     

    ارور زیر رو میده 👇

     

    Items of type 'subs' can't be consumed. (response: -1010:Invalid consumption attempt)

    خطا مربوط به کتابخونه نیست. میگه محصولات اشتراکی قابل مصرف نیستن.

×
×
  • اضافه کردن...