قفل بخش هایی از برنامه برای پرداخت درون برنامه ای
سلام خدمت همگی شما عزیزان
بنده سیستم پرداخت درون برنامه ای بازار را در برنامه ام پیاده سازی کردم و درست هم کار میکرد فقط مشکلم اینجاست که نتونستم بخش هایی از برنامه را قبل پرداخت قفل کنم ، که بعد پرداخت قفل آن باز شود و کاربر دسترسی پیدا کند.
از صبح تا حالا هم هر چی بود امتحان کردم ولی فایده ای نداشت و گفتم بیام اینجا مطرح کنم تا شاید کسی راهنمایی و کمکم کنه....
متشکر میشم اگر راهنماییم کنید چطور باید یک دکمه را قفل کنیم، که بعد از پرداخت آن قفل باز شود....
دروود
شما باید در یکی از listener های بازار که در زمان خریداری برنامه اجرا میشه یک sharedPrefrence با مقدار بولی(boolean ) ذخیره کنی:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("کلید دلخواه",true);
سپس باید در بخش ویژه و یا در واقع قفل برای کاربر عادی چک کنی ببینی کاربر برنامه رو خریده یا نه؟ که با خوندن مقدار SharedPreference بالا میتونید از این موضوع اطلاع پیدا کنید:
boolean isPremium = preferences.getBoolean("کلید وارد شده در کد قبلی",false);
توجه داشته باشید که در کد بالا ، پارامتر آخر مقدار پیشفرض را در متغییر ذخیره میکند.
2 تا متد Save و isLock میسازیم :
private void Save(Boolean bool) {
ObjectOutputStream outputStream = null;
try {
String filename = DIR_APP + "/sys.ucg";
outputStream = new ObjectOutputStream(new FileOutputStream(filename));
outputStream.writeBoolean(bool);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.flush();
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
private Boolean isLock() {
ObjectInputStream inputStream = null;
try {
String filename = DIR_APP + "/sys.ucg";
inputStream = new ObjectInputStream(new FileInputStream(filename));
boolean e = inputStream.readBoolean();
return e;
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
حالا طریقه استفاده کردن:
توی اولین باری که برنامه اجرا میشه باید متد (Save(true اجرا بشه و دیگه اجرا نشه . توی کلیک شدن هر دکمه ای که میخواد به اکتیویتی دیگه ای بره باید شرط زیر گذاشته بشه :
if(!isLock()){
//intent raftan be activity
}
else
{
// peyghame toast ke masalan : bayad noskhe talayi bekharid
}
چون من با درون پرداخت بازار تا حالا کار نکردم نمیدونم چه جوریه ولی وقتی کاربر پرداخت رو انجام داد اطلاعاتی مبنی بر موفقیت آمیز بودن پرداخت به برنامه میفرسته که اون رو چک میکنیم اگه درست بود اون موقع متد (Save(false رو صدا میزنیم.
خلاصه :
Save را دو بار فقط صدا می زنیم ولی isLock رو برای کلیک شدن دکمه ها صدا می زنیم.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .