Page tree
Skip to end of metadata
Go to start of metadata

Myket licensing چیست؟

یکی از دغدغه‌های توسعه‌دهندگانی که می‌خواهند برنامه‌ی خود را به فروش برسانند، استفاده غیر مجاز از برنامه است. بعضی از افراد بدون اینکه برنامه را خریداری کنند از طریق منابع غیر رسمی (سایت‌ها و ...) به فایل apk برنامه دسترسی پیدا می‌کنند.

مایکت از نسخه ۵.۲.۲، با اضافه کردن قابلیت Myket licensing می‌تواند جلوی این دسته افراد را بگیرد. برای این کار کافی است که با استفاده از کد‌های کمکی صدور مجوز مایکت (که در ادامه توضیح داده می‌شود)، از سرویس مایکت بپرسید که آیا کاربر اجازه استفاده از این برنامه را دارد یا خیر؟

در این مستند نحوه پیاده‌سازی و تست Myket licensing را به صورت گام به گام شرح می‌دهیم. برای اینکه مراحل کار را به صورت عملی نیز نشان داده باشیم، یک برنامه انتخاب کردیم تا هر گام را روی آن اعمال کنیم. برنامه‌ی استفاده شده بازی متن‌باز 2048 است.

گام اول: دریافت کلید رمز عمومی از پنل توسعه‌دهندگان

جهت استفاده از Myket licensing ابتدا نیاز است تا کلید رمز عمومی برنامه‌ی خود را از مایکت دریافت کنید. برای این کار باید یک نسخه از apk برنامهٔ خود را به پنل توسعه‌دهندگان اضافه کنید. سپس در قسمت جزییات برنامه‌، دکمه «مشاهده‌ٔ کلید عمومی» را بزنید تا کلید عمومی برنامهٔ شما در دیالوگی نمایش داده شود. این کلید در گام دوم قسمت ۴ استفاده می‌شود.

توجه کنید که Licensing برای برنامه‌های پولی قابل استفاده است. در صورتی که برنامهٔ‌ شما رایگان باشد نمی‌توانید از Myket licensing استفاده کنید.

گام دوم: پیاده‌سازی Myket licensing

در این بخش Myket licensing را برای برنامه‌ی متن‌باز 2048 پیاده‌سازی می‌کنیم. برای این کار به ترتیب زیر عمل می‌کنیم:

۱. ابتدا سورس برنامه را از قسمت پایین دانلود و محتویات پوشهٔ java را در پوشه‌ٔ src/main/java پروژهٔ خود کپی می‌کنیم.

سورس بازی 2048 تغییر یافته را می‌توانید از اینجا دانلود کنید.

ساختار تمام پروژه‌های اندرویدی یکسان نیست. در پروژه‌هایی که با Android Studio ایجاد شده‌اند، باید فایل‌های AIDL را در پوشه‌ی java/aidl کپی داد. ولی در ساختار‌های قدیمی مانند پروژه‌هایی که با Eclipse ایجاد شده‌اند، باید فایل‌های AIDL را در آدرس خودش (پکیجی که در خود فایل آورده شده است) و در کنار دیگر فایل‌های Java کپی کرد. پروژه‌ی 2048 ساختار قدیمی دارد و باید فایل‌های AIDL را به پوشه‌ی زیر منتقل کرد:

src/com/android/vending/licensing


۲. در فایل AndroidManifest.xml، مجوز برای دسترسی به سرویس Myket licensing را اضافه می‌کنیم:

 

۳. پرو‌‌ژه رو Rebuild می‌کنیم. توجه کنید در صورتی که از ابزار gradle استفاده می‌کنید باید gradle را Sync کنید تا فایل‌های AIDL‌ را Compile کند.


۴. برای بررسی license برنامه، باید یک CallBack از نوع LicenseCheckerCallback و یک LicenseChecker ایجاد کنیم:

کلاس LicenseChecker نیاز به سه پارامتر context، policy و publicKey دارد.

context: با استفاده از متد getApplicationContext، کانتکست برنامه را می‌فرستیم.

publicKey: کلید رمز عمومی که از پنل توسعه‌دهندگان دریافت کردیم را به پارامتر publicKey می‌دهیم. (گام اول)

policy: سیاست و استراتژی شما برای بررسی مجوز کاربران در قالب کلاسی با نام Policy تعریف می‌شود. پیشنهاد می‌شود که از کلاس MyketServerManagedPolicy برای Policy برنامه خود استفاده کنید. جهت ساختن یک نمونه از این کلاس به صورت زیر عمل می‌کنیم:

این کلاس به Context و AESObfuscator نیاز دارد. AESObfuscator برای ناخوانا کردن کد و بالا بردن امنیت به کار می‌رود. AESObfuscator به وسیله‌‌ی آرایه‌ای ۲۰ بایتی که به صورت تصادفی ایجاد شده است (SALT)، به همراه Package Name برنامه، و یک عدد یکتا از دستگاه کاربر ساخته می‌شود.

برای ساختن یک Instance از LicenseChecker به موارد زیر نیاز دارید:

deviceId: رشته یکتایی برای دستگاه استفاده کننده از برنامه شما.

SALT: شامل یک byte[] که حاوی ۲۰ عدد Random، جهت بالا رفتن امنیت پروتکل Licensing است.

BASE64_PUBLIC_KEY: کلید عمومی برنامه شما که از پنل توسعه‌دهندگان مایکت دریافت نموده‌اید.

نتیجه را در یک متد با نام initLicense قرار می‌دهیم:

 

۵. همانطور که مشاهده می‌کنید در متد initLicense یک LicenseCheckerCallback  و یک LicenseChecker می‌سازیم. حال کافی است که متد checkAccess(LicenseCheckerCallback) از کلاس LicenseChecker را فراخوانی کنیم. تا پس از اتمام چک کردن License با سرور مایکت، یکی از متد‌های LicenseCheckerCallback  صدا زده شود. برای این کار متدی با نام doCheck ایجاد می‌کنیم:

در صورتی که متد allow‌ صدا زده شد کاربر می‌تواند از برنامه استفاده کند در غیر این صورت (زمانی که dontAllow یا applicationError صدا زده شد) کاربر مجاز به استفاده از برنامه نیست و باید خطای مورد نظر نمایش دهیم.

 

۶. برای پیاده‌سازی Myket license در برنامه متن‌باز 2048 کافی است کمی تغییر در کلاس MainActivity ایجاد کنیم.

ابتدا از متد onCreate برنامه متن‌باز 2048  تکه کدی را که باعث می‌شود برنامه اجرا شود را به متدی با نام appOnCreate منتقل می‌کنیم. سپس به جای تکه کد جدا شده متد initLicense را فراخوانی کرده و برای جلوگیری از چک کردن دوباره License در حین اجرا، یک فیلد Boolean با نام isLicenseCheck تعریف می‌کنیم و با شرط false بودن این متغییر متد initLicense را صدا می‌زنیم. در غیر این صورت متد appOnCreate را Call می‌کنیم.

 در نهایت متد onCreate برنامه به صورت زیر می‌شود:

 

۷. حالا کافی است بدنه متد‌های MyLicenseCheckerCallback را کامل کنیم. در متد allow باید به کاربر اجازه دسترسی به برنامه را بدهیم. یعنی کافی است متد appOnCreate را صدا بزنیم. در غیر این صورت در متد‌های dontAllow و applicationError کاربر اجازه استفاده از برنامه را ندارد ولی باید خطای به وجود آمده را مشاهده کند.

متد dontAllow یک پارامتر Integer با نام policyReason دارد که می‌تواند برابر مقادیر زیر باشد:

Policy.RETRY: در این مورد نیاز است به مجددا برای گرفتن License سعی نماییم.

Policy.MYKET_NOT_INSTALLED: زمانی که مایکت روی دستگاه کاربر نصب نباشد. در این صورت باید کاربر را به سایت مایکت بفرستیم تا ابتدا مایکت را دانلود و نصب کند، سپس مجددا اقدام کند.

Policy.MYKET_NOT_SUPPORTED: کاربر مایکت را روی دستگاه خود دارد، ولی نسخه آن قدیمی است. در این صورت باید به کاربر صفحه جزیئات مایکت را نمایش دهیم تا مایکت خود را به‌روز کند و مجددا سعی کند.

متد applicationError یک پارامتر Integer با نام errorCode دارد که خطاهای هنگام توسعه را بر‌می‌گرداند:

 

ERROR_INVALID_PACKAGE_NAME: برنامه شما در سرور مایکت وجود ندارد یا Package name شما غلط است.
ERROR_NON_MATCHING_UID: برنامه شما اجازه دسترسی به سرویس Myket licensing را ندارد.
ERROR_NOT_MARKET_MANAGED: سرور مایکت در حال حاظر قادر به پاسخگویی نیست.
ERROR_CHECK_IN_PROGRESS: در حال حاظر یک درخواست شما در حال پردازش است.
ERROR_INVALID_PUBLIC_KEY: کلید رمز عمومی شما غلط است.
ERROR_MISSING_PERMISSION: شما Myket licensing permission را در AndroidManifest تعریف نکرده‌اید.

 

توجه کنید که متد‌های LicenseCheckerCallback در Main Thread صدا زده نمی‌شوند و حتما باید با استفاده از یک Handler عملیات آن‌ها را در Thread اصلی Post کرد:

private Handler mHandler;
// Run on UI thread
mHandler.post(new Runnable() {
	public void run() {
    		setProgressBarIndeterminateVisibility(false);
            appOnCreate(null);
    }
});

 

بنابراین MyLicenseCheckerCallback به صورت زیر تکمیل می‌کنیم:

توجه کنید که حتما قبل از انجام هر عملیاتی در متد‌های LicenseCheckerCallback چک کنید که activity در حال بسته شدن نباشد:

if (isFinishing()) {
	// Don't update UI if Activity is finishing.
	return;
}

 

 

۸. حالا رشته‌های زیر را به strings.xml اضافه می‌کنیم: 

 

۹. توجه کنید که در متد onDestroy برنامه باید LicenseChecker را صدا بزنیم:

 

 

۱۰. حالا می‌توانیم پروژه را Build و اجرا کنیم.

 

سورس بازی 2048 تغییر یافته را می‌توانید از اینجا دانلود کنید.

توجه کنید که برنامهٔ شما تنها برای نسخهٔ سازگار آخر License می‌گیرد و اگر ٰVersionCode نسخه‌ای که در پنل آپلود کرده‌اید با VersionCodeی که در دستگاه نصب کرده‌اید متفاوت باشد، به شما License نمی‌هد. در این صورت اگر پس از انتشار نسخهٔ اول نسخهٔ دوم را منتشر کنید، دیگر کاربران شما با نسخهٔ اول License نمی‌گیرند. در صورتی که نمی‌خواهید این سناریو به وجود آید در کلاس LicenseValidator و متد verify، شرط زیر را حذف یا کامنت کنید:

if (!data.versionCode.equals(mVersionCode)) {
Log.e(TAG, "Version codes don't match.");
handleInvalidResponse();
return;
}

توجه کنید که در صورتی که ساعت دستگاه کاربر شما (یا دستگاهی که شما با آن در حال تست هستید) با ساعت سرور مایکت اختلاف داشته باشد (تنظیم نباشد) License به شما داده نمی‌شود. اگر نمی‌خواهید این محدودیت را ایجاد کنید در کلاس LicenseChecker و متد checkAccess در خط زیر به جای DeviceTimeLimiter از DeviceLimiter استفاده کنید:

LicenseValidator validator = new LicenseValidator(mPolicy, new DeviceTimeLimiter(),
callback, generateNonce(), mPackageName, mVersionCode);
توجه کنید برای اولین اجرا نیاز است که دستگاه کاربر به اینترنت متصل باشد. زمانی که کابر برنامه را از مایکت دریافت کرد و وارد برنامه شد و مجوز گرفت، کدهای کمکی مایکت در صورتی که در کلاس LicenseChecker از MyketServerManagedPolicy به عنوان policy برنامهٔ خود استفاده کنید، مجوز را cache می‌شود و کاربر می‌تواند از برنامه استفاده کند. همچنین اولین بار مدت زمان این cache برابر با زمانی‌ است که کاربر می‌تواند برنامه را پس دهد (بازگشت وجه) و پس از گذشت این زمان، روی دستگاه برای همیشه cache می‌شود (تا زمانی که دیتای برنامهٔ شما پاک و یا برنامه Uninstall نشود). البته در صورتی که از StrictPolicy استفاده کنید، برنامهٔ شما cache نخواهد داشت و هر بار، با باز شدن از سرور مایکت مجوز کاربر مورد نظر را سوال می‌کند. توجه کنید که در این صورت برای استفاده از برنامهٔ شما، کاربر باید به اینترنت متصل باشد.
توصیهٔ امنیتی: برای جلوگیری از عملکرد برنامه‌های مخرب، حتما از سورس کد برنامهٔ خود محافظت کنید. ابتدا باید در کد خود بهم‌ریختگی (obfuscation) ایجاد کنید. برای این کار می‌توانید از ابزار‌هایی نظیر ProGuard استفاده کنید. همچنین مقادیر حساس نظیر SALT و کلید رمز عمومی (Public key) را به صورت رشته‌ای ثابت در کد خود قرار ندهید و سعی کنید این رشته‌ها را در زمان اجرای برنامه بسازید (مانند XOR با چند رشتهٔ دیگر). توجه کنید سورس کد‌ کمکی همچنان که در اختیار شما قرار دارد می‌تواند در اختیار هکر‌ها نیز قرار گیرد بنابراین بهتر است ساختار پروژه و ترتیب متد‌ها را تغییر دهید تا برنامهٔ شما الگوی متفاوتی داشته باشد و پیدا کردن آن زمان‌بر شود.

گام سوم: تست برنامه

برای تست سناریوی Myket licensing قبل از انشار دو پیش‌نیاز وجود دارد:

۱. مایکت (نسخه بالای ۵.۲.۲) روی دستگاه نصب باشد.

۲. با اکانت خود (اکانتی که با آن وارد پنل توسعه‌دهندگان می‌شوید) در مایکت Login کنید. توجه کنید در صورتی که با اکانت دیگری وارد مایکت شویم، دیگر مجاز به استفاده از برنامه نیستیم.

در پنل توسعه‌دهندگان قسمتی برای تست سناریوی LICENSED و NOT_LICENSED در نظر گرفته شده است. برای این کار در پنل توسعه‌دهندگان وارد صفحهٔ جزئیات برنامه‌ٔ خود شوید و در قسمت بالای صفحه دکمهٔ «بازگشت پول و صدور مجوز» را کلیک کنید:

حال در دیالوگ باز شده در قسمت «تست قابلیت صدور مجوز» در صورتی که گزینهٔ «اجازه دسترسی به برنامه را نداشته باشم» انتخاب شده باشد سرور مایکت به شما NOT_LICENSED می‌دهد و در صورتی که گزینهٔ «اجازه دسترسی به برنامه را داشته باشم» انتخاب شده باشد، سرور مایکت به شما LICENSED می‌دهد:


 این دو سناریو را با تغییر وضعیت این گزینه‌ها تست کنید و مطمئن شوید که مشکلی در پیاده‌سازی این سناریو‌ها وجود ندارد.

گام چهارم: تست کردن برنامه پس از انتشار و تایید مدیر

پس از اینکه برنامهٔ خود را برای تایید ارسال کردید و به مایکت اضافه شد، با حساب کاربری دیگری این سناریو‌ها رو مجدد تست کنید.

 

  • No labels

39 Comments

  1. Anonymous

    سلام

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

    با تشکر

    1. مستند نحوه‌ی استفاده از سرویس صدور مجوز در B4A را می‌توانید در اینجا ببینید.

  2. Anonymous

    این کار ایده جالب و خوبی است ، با تشکر ، منتظر ماژول برای «یونیتی» برای اجرای این سرویس هستیم.

    موفق باشید.

    1. ممنون. نحوه‌ی اتصال Myket licensing در Unity را می‌توانید در مستند «پیاده‌سازی صدور مجوز در یونیتی» ببینید.

  3. Anonymous

    با سلام

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

     

    لطفا راهنمایی بفرمایید 

    1. لطفا مشخصات برنامه‌ی خود، به همراه شرح مشکل رو به developer@myket.ir بفرستید.

      1. Anonymous

        با سلام

        ایمیل ارسال گردید

         

        سوال دیگری برای ما پیش آمده : مراحل انجام شده بصورت زیر است

        توضیح : در تمام مراحل نرم افزار مجددا اجرا میگردد و تا اکتیویتی آغازین جهت بررسی مجوز اجرا گردد

        توضیح : تمام مراحل سه بار انجام شده است

         

         مرحله 1 : نسخه جدید بر اساس نمونه کد ها جهت بررسی مجوز ایجاد شده است

        مرحله 2 : نرم افزار قبل از اینکه از طریق طریق مایکت نصب شود ، بصورت دستی بر روی دستگاه نصب و نرم افزار مجوز را بدرستی بررسی و اجازه اجراء داده نشد

        مرحله 3 : نرم افزار از روی دستگاه حذف میگردد

        مرحله 4 : نرم افزار در بخش توسعه دهندگان آپلود میگردد

        مرحله 5 : در دستگاه از طریق منوی برنامه های من / برنامه های نشان شده نسخه جدید با امکان بررسی مجوز خریداری و از طریق مایکت بر روی دستگاه نصب گردد

        مرحله 6 : نرم افزار اجرا و صحت مجوز کنترل و اجازه اجرا به نرم افزار داده شد

        مرحله 7 : پس از اجرای موفق نرم افزار ، تنها چند دقیقه پس از اجرا عملیات بازگشت وجه انجام شد

        مرحله 8 : پس از بازگشت پول عملیات حذف نرم افزار توسط کاربر لغو گردد و نرم افزار همچنان بر روی دستگاه نصب است

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

        مرحله 10 : کاربر از نرم افزار خارج گردید

        مرحله 11 : ساعت دستگاه به 3 ساعت بعد تنظیم  و مجددا نرم افزار اجرا شد

        مرحله 12 : بررسی مجوز باز هم با موفقیت انجام شد با اینکه نمیبایست انجام شود

        مرحله 13 : این عملیات با تغییر زمانی به یک ماه بعد و همچنین ریست دستگاه نیز تکرار و با زهم صحت مجوز تایید و اجازه اجراء به نرم افزار داده شد

        مرحله 14 :کاربر در مایکت از اکانت خود خارج گردید بدون اینکه با اکانت دیگری لاگین نماید

        مرحله 15 : نرم افزار مجددا اجرا ولی باز هم مجوز صحیح بود

        مرحله 16 : نرم افزار حذف گردید

        مرحله 17 : نرم افزار مجددا بصورت دستی نصب گردید

        مرحله 18 : پس از اجرا صحت مجوز تایید نشد

         

         

        سوالات پیش آمده

         

        یک - آیا در مرحله 7 نمیبایست مجوز لغو میگردید؟

        دو -در مرحله 11 تا 14در هریک از مراحل نمیبایست مجوز لغو گردد؟

        سه - آیا تنها با حذف نرم افزار مجوز حذف میشود ؟

         

         

        با تقدیم احترام

         

         

        1. با تشکر از کامنت عالی شما. از اینکه مشکلات ما را با ما در میان می‌گذارید ممنون هستیم.

          در مایکت و قبل از ارسال برای تایید نهایی شما می‌توانید در قسمت «نشانه‌شده» برنامه خود را ببینید(همان مرحله ۵). باید توجه داشت که منطق «بازگشت پول» در این قسمت فقط مخصوص دولوپرها می‌باشد و برای کاربرهای عادی این منطق متفاوت است.

          نکته اول: شما در صفحه «نشانه‌شده» بعد از خرید برنامه‌تان همواره دکمه «بازگشت پول» را می‌توانید ببینید ولی کاربرهای عادی که برنامه شما را خواهند خرید بعد از اتمام زمان بازگشت پول(پس از زمان VT) این دکمه را نخواهند دید. 

          نکته دوم: شما در صفحه «نشانه‌شده» به هر تعداد که مایل هستید می‌توانید برنامه خودتان را بخرید و بازگشت پول را اجرا نمایید ولی کاربرهای عادی به دفعات محدودی می‌توانند از مزیت بازگشت پول بهره‌مند شوند.

          نکته سوم: شباهت دکمه بازگشت پول بین شما(دولوپر) و کاربر عادی این است که زمان انقضاء مجوز(VT) قبل از پایان زمان بازگشت پول و بعد از آن یکسان است. به این معنی که VT در درخواست‌های شما به سرور، قبل از بازگشت پول دقیقا همان زمانی است که زمان بازگشت پول تمام می‌شود(یعنی یک یا دو یا ... ساعت) و بعد از زمان بازگشت پول، زمان انقضاء مجوز(VT) در درخواست‌های شما به سرور مایکت روی زمان دوری تنظیم شده‌است.

           

          با توجه به این توضیحات جواب سوال یک شما «خیر» است زیرا زمان انقضاء مجوز هنوز تمام نشده‌بوده‌است. در این مرحله زمان «انقضاء مجوز» همان «زمان بازگشت پول» است. جواب سوال دو و سه شما به ترتیب «بله» و «خیر» است. 

  4. Anonymous

    سلام

    بعد از پیاده سازی، در زمان اجرا با پیام خطای اتصال به اینترنت مواجه میشیم، در صورتی که اتصال اینترنت برقرار هست

    logcat:

    04-03 19:48:49.732 24367-24367/? I/LicenseChecker: Binding to licensing service.

    04-03 19:48:49.736 24367-24367/? I/LicenseChecker: Calling checkLicense on service for com.baranak.xxxx

    04-03 19:48:49.736 24367-24367/? I/LicenseChecker: Start monitoring timeout.

    04-03 19:48:49.736 125-246/? W/genymotion_audio: out_write() limiting sleep time 46802 to 39909

    04-03 19:48:49.968 24367-24406/? I/LicenseChecker: Received response.

    04-03 19:48:49.968 24367-24406/? I/LicenseChecker: Clearing timeout.

    04-03 19:48:49.968 24367-24406/? W/LicenseValidator: Error contacting licensing server.

    04-03 19:48:50.040 24367-24367/? W/EGL_genymotion: eglSurfaceAttrib not implemented

  5. Anonymous

    سلام

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

    با اکانت توسعه دهنده که وارد میشم واکنشی نشون نمیده و همچنان میگه که برنامه خریداری نشده و

    dontallow

    با کد 561 برمیگردونه

    چکار کنیم برای تست کارکرد برنامه؟

    1. سلام

      کد ۵۶۱ طبق فایل om.google.android.vending.licensing.Policy تعریف شده(int NOT_LICENSED = 0x0231) که به معنی این است که اپ لایسنس ندارد.

      مشکلی که اغلب بوجود می‌آید این است که مشخصات اپی که شما آپلود کرده‌اید با مشخصاتی که در پنل وارد کرده‌اید متفاوت است!! مثلا packageName متفاوتی دارد و یا versionCode داخل فایل build.gradle با آخرین نسخه ثبت شده در پنل متفاوت است! لطفا این موارد را چک نمایید.

      با سپاس

      1. Anonymous

        پکیج نیم که مشخص است و یکسان بود

        اما ورژن کد ابتدا نا برابر بود و خطای 

        E/LicenseValidator(21496): Version codes don't match.

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

        اما همچنان 561 برگشت داده میشود

        1. Anonymous

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

          با تشکر

  6. Anonymous

    سلام یه چند سوال، لطفا لطفا جواب دید
    یک، من سورس نمونه رو که گذاشته بودید رو دانلود، ران و نصب کردم، ولی هر کاری می کنم تلاش مجدد میده، آیا سورس کار می کنه و یا خطایی نداره؟
    سوال دو،این کدهای توی عکس رو کجا بنویسیم و چطوری؟

  7. Anonymous

    اگر پوشه
    google
    در مسیر
    src/com
    استفاده نکنیم، آیا مشکی ایجاد می شود؟

  8. Anonymous

    در صورت استفاده نکردن از ابزار
    gradle
    چه مشکل ایجاد می شود؟

  9. Anonymous

    سوال کلی
    معمولا برای ایجاد یک سرویس لاینسس در یک برنامه باید از چه ابزارهایی استفاده کرد؟
    آیا با فایل های
    AIDL
    مجوز در منیفست
    و نوشتن چند کد در اکتیوتی مورد نظر
    نیازه به فایل، کتابخانه، پوشه دیگری هست یا نه؟

  10. Anonymous

    سلام خطا ۲۹۱ میده این 

    که اینترنتم هم وصله

  11. Anonymous

    منم همینطور

  12. Anonymous

    بنده هم همینطور

     

    1. دو روزه مارو علاف کردید ایراد از نسخه مایکته من نسخه رو برگردوندم عقب به 

      5.3.2

      کارکرد

       

      چقد تلاش بیخود کردم به خاطر شما

      1. Anonymous

        دسدت درد نکنه

  13. سلام دوستان...من این سرویس رو برای برنامه ام پیاده سازی کردم ولی وقتی برنامه اجرا میشه متد applicationError با کد 6 برمیگردونه.میشه بگید کجای کارم ایراد داره؟

    1. Anonymous

      فک کنم از نسخه مایکته

      1. یعنی باید مایکت رو بروزرسانی کنم؟ البته طبق توضیحات برای نسخه مایکت باید خطای دیگه ای بده!

        1. Anonymous

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

          1. ورژن 5.3.2 رو نصب کردم بازم همون ارور رو میده! نسخه و پکیج نیم رو هم چک کردم.

            1. Anonymous

              شاید پرموشن اینترنتو ندادی
              چون تو آموزش ننوشته

              1. Anonymous

                پرموشن دادم

  14. دوستان کسی نبود جواب مشکل بالا رو بهمون بگه...کد 6 متد applicationError چیه و به چه دلیل این خطا رخ میده؟

  15. Anonymous

    من هم ، متاسفانه خطای شماره 6 در حالتی که اندروید ورژن 6 یا بالاتر باشه دارم و اندروید با ورژن های پایینتر این مشکل رو ندارم

  16. Anonymous

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

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

    Setting
    Apps
    Configure Apps(بالای صفحه آیکون چرخ دنده)
    App Permissions
    Additional Permissions
    mykey app licensing

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

     

     

     

  17. Anonymous

    این همه وقت گذاشتم چک کردن لایسنس رو درست کردم حالا میبینم اخطار 291 میده :| آقا برای مایکت های ورژن های بالاتر هم ست کنید خب... چه وضعشه این؟

  18. Anonymous

    سلام

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

     

  19. Anonymous

    با سلام

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

      مگه این سرویس فقط یکبار نمیخواد وصل بشه؟

    مشکل از کجاست؟ البته برنامه من از 

    SharedPreferences

    استفاده نمیکنه دلیلش اینه؟

     راهنماییم کنید با تشکر از شما

     

  20. Anonymous

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

  21. Anonymous

    سلام

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

    ممکنه یکی جواب بده لطفا؟

    ورژن کد و ورژن نیم و کلید عمومی ام هم رعایت کردم.

    جواب بدیددددد لطفاااا

  22. Anonymous

    تو فایل دانلود شده  پوشهٔ جاوا رو نمیبینم .کجا باید دنبالش بگردم ؟

     

  23. Anonymous

    سلام من هر دو فایل

    aidl   

    رو تو مسیر

     java\aidl

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

    LicenseCheckerCallback

    رو نمیشناسه .پروژه رو  "ری بیلد" هم میکنم  ولی بازم فرقی نداره . از  "گردل "  هم استفاده میکنم ولی تا زمانی که در خود " گردل " تغییری ایجاد نکنیم دکمه " سینک"   نمایش داده نمیشه با این حال من یک تغییر جزئی ایجاد میکنم تا دکمه  "سینک"  بیاد ، نمیدونم این کار فایده ای داره یا نه ؟ چه کار باید بکنم

Write a comment…