-
تعداد ارسال ها
273 -
تاریخ عضویت
-
روز های برد
13
نوع محتوا
نمایه ها
فروشگاه
تالارهای گفتگو
بخش دریافت
پست ها ارسال شده توسط MrMedia
-
-
۴ دقیقه قبل، محمدرضا شاهپیری گفته است:
یه متد جداگونه بنویسید واسه مصرف کردن خرید بعد توی onIabPurchaseFinished با دستور calsubdelayed اونو صدا بزنید ببینید اکی میشه یا نه نتیجه رو اعلام کنید لطفا
من با متد CallSubDelayed2 انجامش دادم و الان عین ساعت کار میکنه.
خیلی ممنون از راهنماییتون 🌹- 1
-
۱ دقیقه قبل، محمدرضا شاهپیری گفته است:
یه متد جداگونه بنویسید واسه مصرف کردن خرید بعد توی onIabPurchaseFinished با دستور calsubdelayed اونو صدا بزنید ببینید اکی میشه یا نه نتیجه رو اعلام کنید لطفا
بله حتما، الان انجامش میدم
-
سلام و خسته نباشید.
من هم چنان در مشکل دارم و این خطا رو بعد از خرید دریاافت میکنم:main$ResumableSub_myb_onIabPurchaseFinishedresume (java line: 4990) java.lang.NullPointerException: Attempt to read from field 'anywheresoftware.b4a.BA ir.caller.id.main.activityBA' on a null object reference in method 'void ir.caller.id.main$ResumableSub_myb_onIabPurchaseFinished.resume(anywheresoftware.b4a.BA, java.lang.Object[])' at ir.caller.id.main$ResumableSub_myb_onIabPurchaseFinished.resume(main.java:4990) at ir.caller.id.main._myb_oniabpurchasefinished(main.java:4908) at java.lang.reflect.Method.invoke(Native Method) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:205) at com.myketbilling.core.MyketBilling$3.onIabPurchaseFinished(MyketBilling.java:67) at ir.myket.billingclient.util.IAB$1.onReceiveResult(IAB.java:115) at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038) main$ResumableSub_myb_onIabPurchaseFinishedresume (java line: 4990) java.lang.NullPointerException: Attempt to read from field 'anywheresoftware.b4a.BA ir.caller.id.main.activityBA' on a null object reference in method 'void ir.caller.id.main$ResumableSub_myb_onIabPurchaseFinished.resume(anywheresoftware.b4a.BA, java.lang.Object[])' at ir.caller.id.main$ResumableSub_myb_onIabPurchaseFinished.resume(main.java:4990) at ir.caller.id.main._myb_oniabpurchasefinished(main.java:4908) at java.lang.reflect.Method.invoke(Native Method) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:205) at com.myketbilling.core.MyketBilling$3.onIabPurchaseFinished(MyketBilling.java:67) at ir.myket.billingclient.util.IAB$1.onReceiveResult(IAB.java:115) at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
در حال دیباگ اصلا مشکلی برای خرید و خرج کردن ندارم ولی در حالت Release و Release (obfuscated) خطا بالا رو میده
-
سلام و ممنون بابت کتابخونه خوبتون
من برای مصرف خرید مشکل دارم و از روش هایی که در این پست گفتید هم استفاده کردم.
ولی به خطا میخورم و به محض اجرای ساب
Private Sub myket_onIabPurchaseFinished(result As IabResult,purchase As Purchase)
به خطای زیر بر میخورم.
** Activity (main) Pause, UserClosed = false ** Sleep not resumed (context is paused): b4a.example3.b4xloadingindicator$ResumableSub_MainLoop main$ResumableSub_myket_onIabPurchaseFinishedresume (java line: 5006) java.lang.NullPointerException: Attempt to read from field 'anywheresoftware.b4a.BA ir.caller.id.main.activityBA' on a null object reference in method 'void ir.caller.id.main$ResumableSub_myket_onIabPurchaseFinished.resume(anywheresoftware.b4a.BA, java.lang.Object[])' at ir.caller.id.main$ResumableSub_myket_onIabPurchaseFinished.resume(main.java:5006) at ir.caller.id.main._myket_oniabpurchasefinished(main.java:4908) at java.lang.reflect.Method.invoke(Native Method) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:205) at com.myketbilling.core.MyketBilling$3.onIabPurchaseFinished(MyketBilling.java:67) at ir.myket.billingclient.util.IAB$1.onReceiveResult(IAB.java:115) at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038) main$ResumableSub_myket_onIabPurchaseFinishedresume (java line: 5006) java.lang.NullPointerException: Attempt to read from field 'anywheresoftware.b4a.BA ir.caller.id.main.activityBA' on a null object reference in method 'void ir.caller.id.main$ResumableSub_myket_onIabPurchaseFinished.resume(anywheresoftware.b4a.BA, java.lang.Object[])' at ir.caller.id.main$ResumableSub_myket_onIabPurchaseFinished.resume(main.java:5006) at ir.caller.id.main._myket_oniabpurchasefinished(main.java:4908) at java.lang.reflect.Method.invoke(Native Method) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:205) at com.myketbilling.core.MyketBilling$3.onIabPurchaseFinished(MyketBilling.java:67) at ir.myket.billingclient.util.IAB$1.onReceiveResult(IAB.java:115) at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:50) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:210) at android.os.Looper.loop(Looper.java:299) at android.app.ActivityThread.main(ActivityThread.java:8319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
و جوری که متوجه شدم مقدار خالی به این ساب بر میگرده، به خط 4 توجه کنید.
در ضمن اگه زیر پستتون هم از لینک حامی باش یا پرداخت آزاد برای کمک مالی استفاده کنید خیلی خوب میشه تا همه بتونن در صورت تمایل به پروژه کمک کنن
-
2 ساعت قبل، محمدرضا شاهپیری گفته است:
سلام و درود. از wait For استفاده نکنید. متدهای success و error رو به صورت ایونت پیاده کنید. تایم اوت رو هم بالا بزارید یک دیقه معمولا میزارن
چرا تو حالت wait for کار نمیکنه؟ بعدا اضافه میشه به کتابخونه؟
-
سلام من از آخرین نسخه کتابخونه استفاده میکنم ولی متد
WithTimeOut
برام کار نمی کنه
کدم هم اینه
Dim fn As FastNetSetup Dim Request As PersianFastNetwork fn.SetupFastNet.WithSSL.WithTLS.WithCookieManager.WithTimeOut(10000).Build Request.initialize("fn") GetRequest = Request.BuildGetQuery("sample_url","sample_tag") GetRequest.addHeader("sample_header")).executRequest wait For fn_onSucsess(value As String , Tag As Object ) 'my code... Sub fn_onError(Error As ResponseError , Tag As Object) Log(Error.ErrorMsage) End Sub
این مشکل باعث شده لودینگ برنامه که قبل درخواست فرستادن نشون میدم و تایم اوت کار نمیکنه نمی تونم مخفیش کنم و لودینگ دائما بچرخه و همین باعث شده کافه بازار به برنامم اشکال بگیره
-
در 6 ساعت قبل، محمدرضا شاهپیری گفته است :
35 کیلوبایت برای post حجم زیادیه. سعی کنید هنگام پست کردن یا از progressdialog استفاده کنید یا از asynctask
چیزی که برام مهمه اینکه اپلیکیشن فریز نشه که متاسفانه میشه
شما کدوم روشی رو پیشنهاد میکنید که فریز اتفاق نیوفته؟
من خطا هایی که در برنامه رخ داده رو در قالب متن به سرور پست میکنم و نمی تونم از پروگرس دیالوگ استفاده کنم
و اگه ممکنه درباره asynctask کمی توضیح بدین اگه ممکنه با مثال، چون از این گزینه تا حالا استفاده نکردم
ممنون -
آقای شاهپیری من با نسخه 5.50 کتابخونه با متد PostRequest یک مقدار متنی رو به سرور ارسال میکنم، مشکلی در ارسال و دریافت ندارم
مقدار متنی که ارسال میشه گاها حجمش 35kb میشه
اما در هنگام ارسال اپلیکیشن چند ثانیه فریز میشه
مشکل به نظرتون از کجاست؟ -
سلام آقای شاهپیری
من از نسخه 5.50 کتابخونه شما در یکی از پروژه هام استفاده میکنم و بخاطر اینکه تست کلی اپم به خاطر عمل کرد حساسش خیلی زمان میبره از بروز کردن کتابخونه صرف نظر کردم و تا حالا مشکلی نداشتم
حالا میخوام یه آپدیت به برنامه بدم و در آپلود فایل مشکل دارم
کدهام اینه:Dim per As PersianFastNetwork per.initialize("con").WithSSL.WithTLS.WithCookieManager.Build Dim postquery As UploadRequest = per.BuildUploadQuery("https://mysite.com/upload.php","up") postquery.addMultipartFile("note.db",File.DirRootExternal & "/myapp") postquery.startUploadAsString Private Sub up_onStringUploadOK(response As String , Tag As String) ToastMessageShow("ارسال شد",False) End Sub Private Sub up_onStringUploadError(Error As ResponseError , Tag As String) ToastMessageShow("ارسال نشد !",True) End Sub
من تا حالا از این متد استفاده نکردم و از جستجو ها هم چیزی دستگیرم نشد
اگه ممکنه منو راهنمایی کنید و کد های php سمت سرور رو هم برای عملکرد درست برنامه در اختیارم بذارید
-
سلام کسی آخرین نسخه FirebaseAdmob یعنی ورژن 1.6 رو داره آپلود کنم برام؟
آدرس در سایت مرجع: https://www.b4x.com/android/forum/threads/firebaseadmob-v1-6.108552/
اگه کسی دسترسی داره ممنون میشم در اختیارم بزاره -
-
سلام من نیاز به آخرین نسخه appcompat یعنی نسخه 4 دارم
لینکش
https://www.b4x.com/android/forum/attachments/appcompatlib4_00-zip.74025/
کسی این نسخه رو داره آپلود کنه یا دسترسی به سایت مرجع داشته باشه؟
ممنون میشم -
** توضیحات تکمیلی
اگر سوالی درباره کتابخانه دارید می تونید مطرح کنید تا جواب بدم، اما قبل از پرسیدن سوال حتما ویدئوی کتابخانه را ببینیدکد و دیکد کردن متن ها، url و... با کلید 16 کارکتری که توسط شما انتخاب میشه انجام میگیره
و برای سهولت کار ابزار کمکی ویندوز هم به پکیج اضافه شده- 1
-
سلام به همگی
کتابخانه ای تهیه کردم تحت عنوان MrNetUtils
خیلی از مواقع توسعه دهنده ها برای امنیت پرداخت نگرانی دارن و یا برای گرفتن آیدی یکتا گوشی به دلیل محدودیت دسترسی phone در اندروید دچار مشکل می شوند و نگرانی هایی مثل دیکامپایل شدن اپلیکیشن و لو رفتن url های درون اپلیکیشن و...
و برای اپلیکیشن نیاز به دیتابیس استان ها و شهر ها دارن و یا لیست کشورها و پیش شماره آنها
و یا اطلاعات قبل از ثبت مورد راستی آزمایی قرار بگیرن مثل کد ملی، ایمیل و...خیلی از این مشکلات در این کتابخونه رفع شده...
ویدوئوی این کتابخونه را می توانید در زیر مشاهده کنیدبرخی ویژگی های کتابخانه:
دیتابیس کشورها + پیش شماره آنهادیتابیس استان ها و شهر هابه دست آوردن آیدی یکتای گوشی بدون نیاز به دسترسیکد و دیکد کردن اطلاعات در اپلیکیشن و سمت سرور + فایل php
خواندن اطلاعات از api های json
ایجاد user-agent رندوم برای ارسال درخواست به یک url
چک کردن یک پروکسی
چک کردن بالا بودن وی پی ان پروکسی در گوشی
چک کردن وجود یک url
چک کردن ایمیل
و...
* ابزار کمکی برای کد و دیکد کردن متن ها برای ویندوز به پکیج اضافه شد *
این کتابخانه دارای مثال کاربردی هم می باشد و فایل php برای کد و دیکد کردن همراه با مثال هم به آن ضمیمه شده است
لینک خرید کتابخانه- 2
-
در هم اکنون، mohammad3250 گفته است :
من یه سری پارامتر میفرستم سمت سرور ولی مقدار سمت سرور null نشون میده؟ مشکل از چیه ؟
کد b4a و سمت سرورتون رو بفرستید شاید بتونم راهنمایی کنم
-
در هم اکنون، caesar.f گفته است :
سلام، پژمان جان ارادتمندم ممنون برای این کتابخانه و سورس، اما فیلم آموزشش رو نزاشتی داداش، اونو اگه میشه بزار ، اون فیلم دمو نشون میداد انگار یه فیلم آموزشی هم براش گذاشتی اما فیلمی نبود داخل فایل بعد از خرید
تو مثالش همه چیز با توضیحات هستش، کجاش رو مشکل دارید بگید تا راهنمایی کنم
-
سلام آقای شاهپیری اول از همه خیلی ممنون بابت این کتابخونه عالی و شاهکارتون
من یه مشکل داشتم برای ssl هاستم که با دستور WithTLS رفع شد ولی در میان کار به مشکل دیگه ای برخوردم و api سمت سرورم خطایی مبنی بر cookie میداد که اپلیکیشنم از یک جایی جلوتر نمی رفت این مشکلم رو هم با دستور WithCookieManager حل کردم
این پست هم جهت تشکر هستش هم می خواستم بدونم WithCookieManager دقیقا چه عملی انجام میده
البته از اسمش معلومه برای مدیریت کوکی ها هستش -
در هم اکنون، محمدرضا شاهپیری گفته است :
عزیز حواستون باشه که سابها رو داخل ساب دیگه کپی نکرده باشین. دلیلی نداره که با کپی کردن مشکل پیش بیاد.
آقای شاهپیری ممکنه کمی کار با کتابخونه رو بلد نباشم ولی کپی ساب تو ساب چیز نشدی هستش حتی اگه کاربر آماتور باشه
مشکلم حل شد
موقع ران کردن دیباگر به آخرین لاین اشاره میکرد که خالی بود رفتم و روی همون لاین و DELETE رو زدم درست شد!!!!
ممنون از شما
- 1
-
از کد های نمونه شما در پروژه استفاده کردم ولی وقتی کد ها رو paste میکنم این خطا لاگ نمایش داده میشه
con_onGetStringErrorListener is not a valid identifier یا Input string was not a correct format.
در ضمن اگه من در میان کدهام از wait for برای ساب con_onGetStringOkListener استفاده کنم حتما زمانی که اطلاعات دریافت بشه این ساب اجرا میشه اگه به مشکل بربخوره درخواست حتما ساب دیگه ای اجرا میشه و کد های بعد از wait for اجرا نمیشن، فکری دربارش کردید؟ -
سلام
من از کتابخانه irInterNet استفاده میکنم ولی وقتی که خواستم پروژه رو آپدیت کنم متوجه شدم که کتابخانه با ssl سایت من به مشکل برخورده
برای همین این کتابخونه رو خریداری کردم، مثال جامعی ندیدم اگه ممکنه این کد رو تبدیل کنید برامir.init("ir") ir.AddHeader("User-Agent", "Mozilla/5.0...") ir.get("https://site.com/db.php?name=farhad") wait For ir_Response (Success As Boolean , Res As String,header() As Object) If Success Then ''my code End If
سرور من از ssl استفاده میکنه و برام خیلی مهمه که کتابخونه شما بتونه به راحتی بهش وصل بشه و یا در صورت بروز اشکال این کار رو بدون ssl انجام بده
ممنون میشم راهنمایی کنید -
در در 1396/09/01, 01:36:16، محمدرضا شاهپیری گفته است :
مشخصه عزیز. نسخه اندرویدی که استفاده میکنید پایینه. روی 23 به بالا بزارید.
همین کار رو هم کردم ولی بازم همون ارور رو میده، کیدونم کد خاصی نداره ولی اگه یه نمونه بزارید که چک کم ممنون میشم
-
سلام من موقع کامپایل این خطا رو دارم:
Compiling generated Java code. Error B4A line: 30 fl.initialize javac 1.8.0_25 src\b4a\flash\main.java:336: error: cannot access CameraAccessException _fl.initialize(processBA); ^ class file for android.hardware.camera2.CameraAccessException not found
مشکل چیه؟
آیا در مانیفست باید دسترسی هم اضافه کرد؟
-
آقا پژمان خسته نباشید، من کتابخونه شما رو تهیه کردم
کد:
<string name="service_name">pnalarmreceiver</string>
گزینه pnalarmreceiver برای چی هست؟
بعد دریافت آلارم بالا میاد؟ اگه اینطوریه میشه کلا سرویس رو حذف کرد و سرویس خودم رو جایگزینش کنم؟ البته بوت سرویس رو هم true میزام
این امکان هست؟
-
بله حتما تهیه میکنم سوال من بیشتر از این جهت هستش که اطمینان پیدا کنم که این کتابخونه مشکلات که دارم رو حل میکنه
یه سوال دیگه:من میخوام این الارم رو
pn.setNewAlarmRepeating(0,60000,dateTime.Now)
در سرویسی ست کنم که در مانفیست هم معرفی کردم
مشکلی که پیش نمیاد؟
⚠️ جلوگیری از هک درون پرداخت کافه بازار ⚠️
در آموزش های تصویری
ارسال شده در
سلام به دوستان عزیز
این آموزش برای امن کردن درون پرداخت کافه بازار با توجه به مستندات خود کافه بازار هستش.
اگه نمی دونید api کافه بازار چیه کافیه به لینک زیر یه سر بزنی 😉
https://developers.cafebazaar.ir/fa/guidelines/in-app-billing/api#
برای راه اندازی API ابتدا باید یک Client ایجاد کنید. هر Client شامل اطلاعاتی است که از طرف بازار برای شناختهشدن یک کاربر API لازم است. برای ساخت Client به پیشخان بازار مراجعه نمایید و از منو تنظیمات، قسمت API توسعهدهندگان روی گزینه کلاینت جدید کلیک کنید.
در پنجرهٔ باز شده، مقدار مورد نظر خود برای Redirect URI را وارد کنید. این آدرس، مشخص میکند که بازار در پاسخ به درخواست اولیه شما برای دریافت Authorization Code، باید پاسخ را به چه آدرسی بفرستد.
به عکس زیر توجه کنید:
ما آدرس فایل php که برای چک کردن و مصرف خرید کاربران کافه بازار هستش رو درج کردیم (پایین پست فایل رو میزارم) و بعد از زدن دکمه ایجاد کلاینت، کلاینت ایجاد میشه و با عکسی مشابه عکس زیر مواجه میشید.
⚠️برای امنیت برنامه خودم مقادیر رو در عکس مخدوش کردم ⚠️
✅ خب حالا دو مقدار Client Id و Client Secret رو یکجا کپی کنید چون نیازمون میشه
حالا بجای سخت کار می رسیم!! به اینجای کار با خوب دقت کنید
در این مرحله در مرورگر خود یک New Tab یا پنجره جدید باز کنید و آدرس زیر را تکمیل کنید:
https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=&client_id=
خب چطور باید تکمیلش کنیم؟ ببینید دوستان این همون متد GET هستش شما باید جلوی مساوی هایی که خالی هستش رو پر کنید
جلوی redirect_uri همون آدرس فایل php که برای ساخت کلاینت دادیم رو میزاریم (عکس 1) و جلوی client_id هم مقداری که در عکس 2 زیر همون عنوان می بینید رو درج می کنیم.
پس با این حساب آدرس ما میشه این:
https://pardakht.cafebazaar.ir/devapi/v2/auth/authorize/?response_type=code&access_type=offline&redirect_uri=https://website.ir/bazaar.php&client_id=JFNF85BFPHKSVBJ67CNNDMMSUYHWNKRLLJDGRK
خب حالا آدرس رو در مرورگر وارد کنید و Enter را بزنید تا صفحه لود شود
بعد از لود شدن صفحه با چنین صفحه ای مواجه می شوید:
حالا کافیه روی تایید کلیک کنید تا به آدرس فایل php که برای ساخت کلاینت استفاده کردیم (عکس 1) ارجاع داده بشیم.
خب به آدرس مرورگر نگاه کنید آدرس مرورگر شما چیزی شبیه به این هستش:
حالا مقداری که جلوی =code هستش رو یجا کپی کنید
خب تا اینجا ما 3 تا مقدارو گفتیم یجا کپی کنید، یادتونه؟؟؟ اون مقادیر اینا بودن: Client Id و Client Secret و code
اون مقادیر الان به کار میاد:
باید اونا رو در کد زیر جایگزین کنی
خب فایل رو با فرمت php ذخیره کن و در هاستت آپلود کن و در مرورگر آدرسشو وارد و Enter رو بزن تا صفحه بارگذاری بشه
این کار Postman خیلی راحت تر هستش ولی گفتم شاید برخی از دوستان آشنایی ندارند با این روش جلو میریم و اگه با Postman آشنایی داری با کد curl زیر انجامش بده:
خب حالا برگردیم به مرورگرمون که بارگذاری شده
نتیجه به صورت متنی در قالب JSON دریافت میشه که حاوی access token ، زمان انقضا ، نوع توکن موردنظر، scope و refresh token هستش.
ما از این مقادیر جیسون فقط به refresh token نیاز داریم پس یجا کپی کن.
از این جا به بعد دیگه آسون میشه 🥰
خب یادتونه یک آدرس برای ساخت کلاینت وارد کرده بودیم؟ (عکس 1) که از آدرس https://website.ir/bazaar.php استفاده کرده بودیم؟
این کد class که باید درون این فایل قرار بگیره:
خب در خط 7 و 8 و 9 مقادیری که گفتم کپی کن رو جایگزین کنید و تمام 🥳
دیگه می مونه فقط نحوه استفاده از این کلاس ولی چندتا نکنه هست که باید بهتون بگم:
چرا بصورت class نوشتم کدرو؟ چون می تونیم در همه پروژه هامون ازش استفاده کنیم و نیازی به کپی فایل و دستکاری و... نداره (یکی از مزیت های شی گرائی اینه)
چرا مصرف خرید درسمت سرور انجام میشه؟ چون من معتقدم که هیچ کار مهمی نباید برای امنیت در سمت کلاینت (کاربر) انجام بشه و کاربر فقط باید مشاهده کننده باشه!!!
خب چطور استفاده کنیم از این کلاس؟؟؟
شما درون فایل php که به اپلیکیشنت وصله کافیه این class رو اینجوری فراخونی کنی:
بعد کافیه هر جایی از کدت خواستی خرید کاربر رو بررسی کنی این کد رو استفاده کنی:
خب کد که کاملا مشخص هستش و کافیه شما در جاهایی نوشته شده خرید معتبر و جعلی، کدهای خودت رو بنویسی.
حالا نکته آخر که باید سمت اپلیکیشن انجام بدی که مهم هستش پس خوب توجه کن:
شما در سمت کاربر یا همون اپلیکیشن باید این موارد رو انجام بدی:
1. حتما و حتما وقتی که از کتابخونه Poolaky یک متغییر PoolakeyPurchaseRequest تعریف کردی از Payload استفاده کن مقدارش رو هم آیدی یکتا کاربر بزار (android_id)
2. موقعی که میخای به سمت سرور درخواست بدی باید موارد زیر رو ارسال کنی:
✅ پکیج نیم
✅ آیدی محصول
✅ توکن خرید
✅ آیدی یکتا کاربر
درخواست به صورت GET فرستاده بشه و با کلید های:
🔑 package_name
🔑 product_id
🔑 purchase_token
🔑 userid
برای مثال:
https://website.ir/api.php?package_name=پکیج_نیم&product_id=آیدی_محصول&purchase_token=توکن_خرید&userid=آیدی_یکتا_کاربر
در مثال بالا مواردی که فارسی هستند باید جایگزین شه
همه موارد کاملا مشخصه فقط شاید توکن خرید براتون ناآشنا باشه 🤔
بعد از خرید موفق از بازار یک تابع که با اول نام ایونتی که شما موقع تعریف کتابخونه پولکی داشتید فراخونی میشه. ما اینجا فکر میکنیم نام این ایونت یا رویداد رو گذاشته بودیم bazaar پس این تابع بعد از خرید موفق فراخونی میشه:
در مثال بالا PToken همون مقدار string توکن خرید هستش که باید موقع بررسی خرید ارسال کنیم.
دیگه شما از چه کتابخونه ای برای ارسال مقادیر با متد GET استفاده می کنید با خودتونه. میتونی کتابخونه پیشفرض b4a باشه یا کتابخونه ای که خرید کردین 🥰
امیدوارم این آموزش به کارتون بیاد 🤩
و اینکه این فروم مکانی امن و رایگان برای یادگیری هستش، اگه حس میکنی نه تنها این مطلب بلکه مطالب، کتابخونه ها رایگان و... انجمن بهت کمک کرده ممنون میشم به انجمن خودتون از طریق لینک زیر به مبلغ دلخواه کمک کنید.
لینک حمایت مالی جهت حفظ و ارتقا سیستم انجمن و ارتقا کتابخانه ها + به روزرسانی و حمایت از تیم برنامه نویسی