نسخه چاپی
فهرست مطالب

چگونه از بروز بودن برنامه خود اطمینان پیدا کنید؟

بروز بودن برنامه روی گوشی کاربران به حفظ ثبات و امنیت  برنامه شما کمک می‌‌کند و این امکان را فراهم می‌‌آورد تا کاربران به جدیدترین قابلیت‌های برنامه شما دسترسی پیدا کنند. این راهنما به شما کمک می‌‌کند تا با به‌دست‌آوردن شماره نسخه‌ی (version code) آخرین نسخه برنامه خود در بازار، بروز بودن برنامه‌تان را بررسی کنید. 

۱. ابتدا یک پوشه با نام aidl در ماژول برنامه‌تان بسازید. سپس پکیجی با نام com.farsitel.bazaar در این پوشه ایجاد کنید. در ادامه، فایل IUpdateCheckService .<wbr/>aidl را دانلود کنید و سپس آن را در پکیج ساخته‌شده کپی کنید.
ساختار پوشه‌بندی پروژه‌ی شما در محیط Android Studio مانند تصویر زیر است:‌

۲. در این مرحله، باید پروژه‌ی خود را build و compile کنید. (همچنین می‌توانید gradle task مربوط به ساختن فایل‌های مورد نیاز خود را، که معمولاً با نام compileDebugAidl شناخته می‌شود، اجرا کنید.)

فرض کنید می‌خواهید شماره نسخه‌ی (version code) برنامه‌ی خود را داخل یک Activity به نام UpdateCheckActivity از برنامه‌ی بازار بپرسید. برای برقراری ارتباط میان سرویس بازار و برنامه‌ی خود، یک کلاس درونی به نام UpdateServiceConnection را که کلاس ServiceConnection اندروید را پیاده‌سازی می‌کند، ایجاد کنید.

۳. UpdateServiceConnection شامل متدهای onServiceConnected و onServiceDiconnected خواهد بود. این متدها، Callbackهایی هستند که پیاده‌‌سازی Stub سرویس بازار را هنگام اتصال می‌گیرند. در این مرحله، باید نوع (Type Cast) آن را از Stub پیاده‌سازی سرویس تغییر دهید. کد زیر در متد onServiceConnected: 

IUpdateCheckService.Stub.asInterface((IBinder) boundService);

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

۴. کد کامل مربوط به UpdateCheckActivity را در ادامه مشاهده می‌کنید:

public class MainActivity extends Activity {

	IUpdateCheckService service;
	UpdateServiceConnection connection;
	private static final String TAG = "UpdateCheck";

	class UpdateServiceConnection implements ServiceConnection {
		public void onServiceConnected(ComponentName name, IBinder boundService) {
			service = IUpdateCheckService.Stub
					.asInterface((IBinder) boundService);
			try {
				long vCode = service.getVersionCode("packagename");
				Toast.makeText(MainActivity.this, "Version Code:" + vCode,
						Toast.LENGTH_LONG).show();
			} catch (Exception e) {
				e.printStackTrace();
			}
			Log.d(TAG, "onServiceConnected(): Connected");
		}

		public void onServiceDisconnected(ComponentName name) {
			service = null;
			Log.d(TAG, "onServiceDisconnected(): Disconnected");
		}
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initService();
                ...
	}

	private void initService() {
		Log.i(TAG, "initService()");
		connection = new UpdateServiceConnection();
		Intent i = new Intent(
				"com.farsitel.bazaar.service.UpdateCheckService.BIND");
		i.setPackage("com.farsitel.bazaar");
		boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
		Log.d(TAG, "initService() bound value: " + ret);
	}

	/** This is our function to un-binds this activity from our service. */
	private void releaseService() {
		unbindService(connection);
		connection = null;
		Log.d(TAG, "releaseService(): unbound.");
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		releaseService();
	}
}

توجه:

به جای "PACKAGE NAME" باید نام بستۀ برنامه مورد نظر را قرار دهید.

۵. کلاس داخلی زیر، درخواست شما به بازار را پردازش می‌کند و جواب را به وسیله‌ی یک toast نشان می‌دهد.

class UpdateServiceConnection implements ServiceConnection {
	public void onServiceConnected(ComponentName name, IBinder boundService) {
		service = IUpdateCheckService.Stub
				.asInterface((IBinder) boundService);
		try {
			long vCode = service.getVersionCode("packagename");
			Toast.makeText(MainActivity.this, "Version Code:" + vCode,
					Toast.LENGTH_LONG).show();
		} catch (Exception e) {
			e.printStackTrace();
		}
		Log.d(TAG, "onServiceConnected(): Connected");
	}

	public void onServiceDisconnected(ComponentName name) {
		service = null;
		Log.d(TAG, "onServiceDisconnected(): Disconnected");
	}
}

۶. زمانی که می‌خواهید وضعیت بروز بودن برنامه‌تان را بررسی کنید، باید این سرویس را با استفاده از  ()initService به صورت اولیه راه‌اندازی کنید (به عنوان مثال در کدهای نمونه بالا، ما این تابع را در onCreate مربوط به MainActivity صدا زدیم).

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	initService();
	...
}

۷. تابع initService یک UpdateServiceConnection و Intent جدید می‌سازد و این دو را به هم متصل می‌کند تا به بازار متصل شوند.

private void initService() {
	Log.i(TAG, "initService()");
	connection = new UpdateServiceConnection();
	Intent i = new Intent(
			"com.farsitel.bazaar.service.UpdateCheckService.BIND");
	i.setPackage("com.farsitel.bazaar");
	boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE);
	Log.d(TAG, "initService() bound value: " + ret);
}

۸. تابع  releaseService به منظور آزادسازی منابع استفاده می‌شود.

private void releaseService() {
	unbindService(connection);
	connection = null;
	Log.d(TAG, "releaseService(): unbound.");
}

۹. زمانی که کارتان با این سرویس تمام شد باید تابع ()releaseService را صدا بزنید (در این مثال، ما آن را در تابع onDestroy مربوط به MainActivity صدا زدیم).

protected void onDestroy() {
	super.onDestroy();
	releaseService();
	...
}

۱۰. خط زیر در کد بالا، versionCode برنامه شما را در صورتی که بروزرسانی برای آن وجود داشته باشد (versionCode برنامه موجود در بازار از versionCode برنامه‌ای که بر روی گوشی کاربر نصب است، بزرگتر باشد)، برمی‌گرداند؛ در غیر این صورت مقدار ۱- را برمی‌گرداند.

توجه کنید که باید "your.app.packagename" را با نام بسته‌ی برنامه‌ی خود جایگزین کنید.

long vCode = service.getVersionCode("packagename");

۱۱. در انتها می‌توانید با مقایسه نسخه‌ی برنامه نصب شده بر روی دستگاه کاربر با آخرین نسخه موجود بر روی بازار تصمیم‌های متفاوتی بگیرید. برای مثال می‌توانید به کاربر پیغام بروزرسانی بدهید و در صورت توافق، وی را به صفحه برنامه‌تان در کافه‌بازار ارجاع دهید تا بتواند آخرین نسخه برنامه‌تان را دریافت کند. البته ممکن است به دلیل وجود cache، مدت زمانی طول بکشد تا از نسخه‌ی جدید آگاه شوید.

توجه:

این API امکان بررسی بروز بودن برنامه‌های دیگر را به شما نمی‌دهد. اگر برنامه‌ای با نام بستهٔ a.b.c این تابع را فراخوانی کند، بازار تنها امکان بروزرسانی برنامه با نام بسته‌ی a.b.c را، که در بازار موجود باشد، بررسی می‌کند؛ در غیر این‌صورت این تابع همیشه 1- برمی‌گرداند. 

۱۲. متد initService در کد بالا متدی است که اتصال با بازار را برقرار می‌کند و از متد onCreate مربوط به UpdateCheckActivity فراخوانی می‌شود.

به مطالب ارائه شده چه امتیازی می‌دهید؟
محل نوشتن دیدگاه ...

اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.

زمان انتشار: ۱۴۰۰-۰۳-۲۵ ۱۷:۱۲

آخرین به‌روزرسانی: ۱۴۰۰-۱۲-۰۴ ۰۹:۵۸