گذاشتن محدوده زمانی برای برنامه
با سلام
من میخوام برای برنامم یه محدوده زمانی بذارم که زمانی که کاربر برنامه رو روی گوشی نصب کرد به مدت 30 روز کار کنه و بعد از این مدت پیغامی به کاربر نمایش بده که محدوده زمانی به پایان رسیده.
بهترین روش چی میتونه باشه؟
برنامه شما باید بصورت پیشفرض غیر قابل باز شدن باشه ، یعنی در حالت افلاین کاملا غیر فعال باشه و از صفحه Splash رد نشه و حداقل یکبار برای بررسی تنظیمات به سرور وصل بشه
استفاده از IMEI میتونه مفید باشه ، شما باید یک درخواست به سرور ارسال کنید و روی سرور time رو بگیرید و در صورتی که IMEI تکراری نباشه اون رو ذخیره کنید بعد در غیر این صورت اگر تکراری باشه باید فیلد رو بخونید و با زمان حاضر تفاوت رو محاسبه کنید در صورتی که از 30 روز بیشتر بود برنامه از Splash رد نشه
یک جمله از استاد هست عین اون رو میذارم واقعا مفید هستش : UUID چیست :
| UUID چیست ( جواب یکی از سئوالات ) : کد یکتایی است که توسط ما قابل تولید است. توجه داشته باشید که: شماره سیم کارت در ایران قابل برداشتن نیست ( به آن دسترسی نداریم ). کد IMEI همیشه وجود ندارد ( در خیلی از Tablet ها ) کد Android ID هم خیلی جاها وجود ندارد. MAC ADDRESS قابل جعل شدن است پس UUID ترکیب این سه عبارت است ( به هر شکل ترکیب شود مهم نیست ): imei-android_id-mac_address حتی می تواند ترکیب Encode شده غیر قابل بازگشتی مثل sha1 آن باشد. |
شاید این کد خوبی باشه
private String getMACAddress(String interfaceName) {
try {
List<NetworkInterface> interfaces = Collections
.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
if (interfaceName != null) {
if (!intf.getName().equalsIgnoreCase(interfaceName))
continue;
}
byte[] mac = intf.getHardwareAddress();
if (mac == null)
return "";
StringBuilder buf = new StringBuilder();
for (int idx = 0; idx < mac.length; idx++)
buf.append(String.format("%02X:", mac[idx]));
if (buf.length() > 0)
buf.deleteCharAt(buf.length() - 1);
return buf.toString();
}
} catch (Exception ex) {
}
return "";
}
private String getUUID() {
TelephonyManager teleManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
String tmSerial = teleManager.getSimSerialNumber();
Log.i(G.APP_LOG, "tmSerial:" + tmSerial);
String tmDeviceId = teleManager.getDeviceId();
Log.i(G.APP_LOG, "tmDeviceId:" + tmDeviceId);
String androidId = android.provider.Settings.Secure.getString(
getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
Log.i(G.APP_LOG, "androidId:" + androidId);
String macwifi = getMACAddress("wlan0"); // using wifi
Log.i(G.APP_LOG, "macwifi:" + macwifi);
String macethernet = getMACAddress("eth0"); // using ethernet
Log.i(G.APP_LOG, "macethernet:" + macethernet);
if (tmSerial == null) {
tmSerial = "1";
}
if (tmDeviceId == null) {
tmDeviceId = "1";
}
if (androidId == null) {
androidId = "1";
}
if (macwifi == null | macwifi.equals("")) {
macwifi = "1";
}
if (macethernet == null | macethernet.equals("")) {
macethernet = "1";
}
String mac = macwifi + macethernet;
UUID deviceUuid = new UUID(androidId.hashCode() + mac.hashCode(),
((long) tmDeviceId.hashCode() << 32) | tmSerial.hashCode());
String uniqueId = deviceUuid.toString();
return uniqueId;
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .