AndroidManifest Permissions: کلیدی تصورات، اعلام اور اجازتوں کی اقسام

مصنف: IT Sectr اشاعت: 2026-05-21 مطالعے کا وقت: 10 منٹ

AndroidManifest Permissions AndroidManifest.xml فائل میں اجازتوں کے اعلانات ہیں جو یہ طے کرتے ہیں کہ ایپلیکیشن کن سسٹم وسائل اور ڈیٹا تک رسائی حاصل کر سکتی ہے۔ Android کو متعلقہ API استعمال کرنے سے پہلے مینی فیسٹ میں ہر اجازت کے اعلان کی ضرورت ہوتی ہے: کیمرہ اور جغرافیائی محل وقوع سے لے کر SMS بھیجنے اور رابطوں تک رسائی تک۔ Android ڈویلپر دستاویزات کے مطابق، ہر اجازت چار تحفظ کی سطحوں میں سے ایک میں آتی ہے: normal، dangerous، signature اور special۔

اہم نکات

  • AndroidManifest.xml — تمام ایپلیکیشن اجازتوں کے اعلان پر مشتمل مینی فیسٹ فائل
  • تحفظ کی سطحیں — normal، dangerous، signature، special مختلف درخواست میکانزم کے ساتھ
  • Runtime Permission — dangerous اجازتوں کو رن ٹائم پر درخواست کی ضرورت ہوتی ہے (Android 6+)
  • اعلان بمقابلہ درخواست — مینی فیسٹ میں اعلان لازمی ہے، لیکن dangerous کو کوڈ میں اضافی درخواست کی ضرورت ہوتی ہے
  • گروپ — اجازتیں گروپوں میں منظم ہیں، ایک پر رضامندی پورے گروپ تک رسائی دیتی ہے

AndroidManifest Permissions کیا ہیں؟

AndroidManifest Permissions Android کا سیکیورٹی میکانزم ہے جو ایپلیکیشنز کی محفوظ ڈیٹا اور سسٹم فنکشنز تک رسائی کو کنٹرول کرتا ہے۔ ہر ایپلیکیشن کو عنصر استعمال کرتے ہوئے AndroidManifest.xml فائل میں ضروری اجازتوں کا اعلان کرنا ہوتا ہے۔ اعلان کے بغیر، متعلقہ API کو کال کرنے سے SecurityException سیکیورٹی خرابی پیدا ہوگی۔

Android کا اجازت ماڈل کئی ارتقائی مراحل سے گزرا ہے۔ Android 6.0 (API 23) سے پہلے، تمام اجازتیں تنصیب کے وقت دی جاتی تھیں — صارف مکمل فہرست دیکھتا تھا اور ایپلیکیشن کی تنصیب سے اتفاق یا انکار کرتا تھا۔ Android 6.0 سے شروع کرتے ہوئے، dangerous سطح کی اجازتیں رن ٹائم پر (Runtime Permissions) درخواست کی جاتی ہیں، جو صارف کو زیادہ لچکدار کنٹرول دیتی ہیں۔

اجازتیں چار تحفظ کی سطحوں میں تقسیم ہیں: normal (تنصیب پر خودکار طور پر دی جاتی ہیں)، dangerous (رن ٹائم درخواست کی ضرورت)، signature (صرف اسی سرٹیفکیٹ سے دستخط شدہ ایپلیکیشنز کے لیے دستیاب) اور special (ترتیبات میں علیحدہ فعال کرنے کی ضرورت)۔ ہر سطح کا اپنا دینے اور منسوخ کرنے کا میکانزم ہے۔

Google I/O 2024 کے مطابق، Android 15 مزید تفصیلی اجازتیں متعارف کرانے کا ارادہ رکھتا ہے — صارف پوری میڈیا لائبریری کے بجائے صرف مخصوص فائلوں تک رسائی دے سکے گا۔ یہ ڈیفالٹ طور پر فراہم کردہ ڈیٹا کی مقدار کو کم سے کم کرنے کے Android کے رجحان کو جاری رکھتا ہے۔

iOS اجازت ماڈل سے فرق

iOS کے برعکس، جہاں تمام اجازتیں رن ٹائم پر درخواست کی جاتی ہیں، Android اجازتوں کو تنصیب کے وقت (install-time) اور رن ٹائم (runtime) میں تقسیم کرتا ہے۔ normal سطح صارف کو مطلع کیے بغیر تنصیب پر خودکار طور پر دی جاتی ہے۔ dangerous سطح کو iOS کی طرح واضح مکالمے کی ضرورت ہوتی ہے۔

ایک اور فرق: Android میں، اجازتیں اجازت گروپوں میں منظم ہیں۔ اگر صارف کیمرہ تک رسائی سے اتفاق کرتا ہے، تو ایپلیکیشن خود بخود مائیکروفون تک رسائی حاصل کر لیتی ہے — وہ ایک ہی MICROPHONE گروپ میں ہیں۔ iOS میں، ہر اجازت گروپوں سے قطع نظر آزادانہ طور پر درخواست کی جاتی ہے۔

Android ورژن کے مطابق اجازتوں کا ارتقاء

Android ورژناجازت ماڈل میں تبدیلی
Android 1.0–5.xتمام اجازتیں تنصیب پر دی جاتی ہیں
Android 6.0 (API 23)dangerous سطح کے لیے Runtime Permissions کا تعارف
Android 10 (API 29)Scoped Storage — فائل سسٹم تک محدود رسائی
Android 11 (API 30)خودکار ری سیٹ اجازتیں — غیر استعمال شدہ اجازتیں ری سیٹ ہو جاتی ہیں
Android 14 (API 34)میڈیا تک رسائی (تصویر، ویڈیو، آڈیو) کے لیے رن ٹائم اجازتیں

اجازتوں کی کون سی اقسام ہیں

Android اجازتوں کے لیے چار تحفظ کی سطحیں متعین کرتا ہے، ہر ایک کے اپنے دینے کے قواعد ہیں۔ آئیے ہر سطح کا تفصیل سے جائزہ لیتے ہیں۔

Normal اجازتیں (تنصیب کے وقت)

Normal اجازتیں صارف کو مطلع یا درخواست کیے بغیر ایپلیکیشن کی تنصیب پر خودکار طور پر دی جاتی ہیں۔ یہ کم خطرے والے افعال کا احاطہ کرتی ہیں جو صارف کی رازداری کو خطرہ نہیں پہنچاتے: INTERNET، ACCESS_NETWORK_STATE، VIBRATE، BLUETOOTH۔ صارف کوئی رضامندی کا مکالمہ نہیں دیکھتا — اجازت تنصیب کے بعد دی گئی سمجھی جاتی ہے۔

ڈویلپر کو normal اجازتوں کے لیے کوڈ میں درخواست سنبھالنے کی ضرورت نہیں ہے — مینی فیسٹ میں اعلان کرنا کافی ہے۔ تاہم، Android 12+ میں، Google Play سے تنصیب کرتے وقت، صارف تمام normal اجازتوں کی فہرست والا ایک «اجازتیں» ٹیب دیکھتا ہے، جو شفافیت بڑھاتا ہے۔ Statista (2024) کے مطابق، Google Play میں 90% سے زیادہ ایپلیکیشنز سب سے عام normal اجازت کے طور پر INTERNET استعمال کرتی ہیں۔

Dangerous اجازتیں (رن ٹائم)

Dangerous اجازتیں ڈیٹا اور افعال تک رسائی کا احاطہ کرتی ہیں جو رازداری سے سمجھوتہ کر سکتے ہیں: کیمرہ، مائیکروفون، جغرافیائی محل وقوع، رابطے، SMS، فون، کیلنڈر، جسمانی سینسر۔ ان اجازتوں کو دو مرحلوں پر مشتمل میکانزم کی ضرورت ہوتی ہے: مینی فیسٹ میں اعلان + ActivityCompat.requestPermissions() کے ذریعے رن ٹائم درخواست۔

صارف dangerous اجازت سے انکار کر سکتا ہے، اور ایپلیکیشن کو اس منظر نامے کو صحیح طریقے سے سنبھالنا چاہیے۔ Android 11+ میں، اگر صارف دو بار انکار کرتا ہے، تو بعد کی درخواستیں سسٹم مکالمہ نہیں دکھاتی ہیں — سسٹم خود بخود DENIED لوٹاتا ہے۔ اس صورت میں، ایپلیکیشن کو صارف کو ترتیبات کی طرف رہنمائی کرنی چاہیے۔

Signature اور Special اجازتیں

signature سطح — اجازت خود بخود دی جاتی ہے اگر ایپلیکیشن اسی سرٹیفکیٹ سے دستخط شدہ ہو جو سسٹم یا کسی اور ایپلیکیشن نے اجازت کی تعریف کی ہے۔ سسٹم اور کارپوریٹ ایپلیکیشنز کے لیے استعمال ہوتی ہے۔ مثال: BIND_ACCESSIBILITY_SERVICE — صرف سسٹم ایپلیکیشنز کے لیے دستیاب۔

special سطح (SYSTEM_ALERT_WINDOW، WRITE_SETTINGS، REQUEST_INSTALL_PACKAGES، MANAGE_EXTERNAL_STORAGE) — سسٹم ترتیبات کے ذریعے صارف کے واضح عمل کی ضرورت ہوتی ہے۔ ایپلیکیشن Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION) کے ساتھ ترتیبات کا صفحہ کھول سکتی ہے۔ Google Play special اجازتوں کے استعمال کو محدود کرتا ہے اور اشاعت کے وقت فارم میں جواز کی ضرورت ہوتی ہے۔

Runtime Permission: dangerous اجازتوں کے ساتھ کام کرنا

Android 6.0 سے، تمام dangerous اجازتوں کو رن ٹائم درخواست کی ضرورت ہوتی ہے۔ آئیے Kotlin میں رن ٹائم اجازتوں کے ساتھ مکمل کام کے چکر کا جائزہ لیتے ہیں۔

اجازت کی جانچ اور درخواست

جس API کو dangerous اجازت کی ضرورت ہے اسے کال کرنے سے پہلے، ہمیشہ ContextCompat.checkSelfPermission() کے ذریعے موجودہ حیثیت چیک کریں۔ اگر حیثیت PERMISSION_GRANTED ہے، تو آپ API کال کر سکتے ہیں۔ اگر PERMISSION_DENIED ہے، تو آپ کو ActivityResultContract RequestPermission (AndroidX) یا فرسودہ requestPermissions() کے ذریعے اجازت کی درخواست کرنی ہوگی۔

ایک ساتھ متعدد اجازتوں کی درخواست کرنے کے لیے ActivityResultContracts.RequestMultiplePermissions استعمال کرنے کی سفارش کی جاتی ہے۔ Google ایک مکالمے میں متعلقہ اجازتوں (مثلاً، ویڈیو ریکارڈنگ کے لیے کیمرہ + مائیکروفون) کو گروپ کرنے کی سفارش کرتا ہے، تاکہ صارف درخواست کا مکمل سیاق و سباق دیکھ سکے۔

kotlin
import android.Manifest
import android.content.pm.PackageManager
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat

class CameraActivity : AppCompatActivity() {
    private val requestPermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestPermission()
        ) { isGranted: Boolean ->
            if (isGranted) {
                openCamera()
            } else {
                explainWhyPermissionNeeded()
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        checkCameraPermission()
    }

    private fun checkCameraPermission() {
        when {
            ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_GRANTED -> {
                openCamera()
            }
            shouldShowRequestPermissionRationale(
                Manifest.permission.CAMERA
            ) -> {
                showRationale()
            }
            else -> {
                requestPermissionLauncher.launch(
                    Manifest.permission.CAMERA
                )
            }
        }
    }
}

«دوبارہ مت پوچھیں» مستردی کو سنبھالنا

اگر صارف دو بار انکار کرتا ہے، تو Android درخواست کو «Never ask again» حالت میں ڈال دیتا ہے۔ اس صورت میں، shouldShowRequestPermissionRationale() false لوٹاتا ہے، اور سسٹم مکالمہ نہیں دکھایا جائے گا۔ ایپلیکیشن کو Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) کے ذریعے صارف کو سسٹم ترتیبات کی طرف رہنمائی کرنی چاہیے۔

اہم: پہلے انکار کے فوراً بعد ترتیبات کھولنے کی پیشکش کرنے والا مکالمہ نہ دکھائیں — اسے جارحانہ رویہ سمجھا جاتا ہے۔ shouldShowRequestPermissionRationale() استعمال کریں تاکہ یہ طے کیا جا سکے کہ آیا وضاحت دکھانے کی ضرورت ہے۔ Material Design رہنما خطوط صرف «ترتیبات کھولیں» بٹن کے بجائے رسائی کی قدر کی وضاحت کرنے والی اسکرین دکھانے کی سفارش کرتے ہیں۔

kotlin
private fun openAppSettings() {
    Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", packageName, null)
    ).also { intent ->
        startActivity(intent)
    }
}

private fun showPermissionSettings() {
    AlertDialog.Builder(this)
        .setTitle("کیمرہ تک رسائی")
        .setMessage("ترتیبات میں کیمرہ تک رسائی کی اجازت دیں، "
            + "پروفائل تصویر لینے کے لیے")
        .setPositiveButton("ترتیبات کھولیں") { _, _ ->
            openAppSettings()
        }
        .setNegativeButton("منسوخ کریں", null)
        .show()
}

AndroidManifest.xml میں اجازتوں کا اعلان

AndroidManifest.xml فائل میں ہر اجازت کے لیے عنصر ہوتا ہے جو ایپلیکیشن استعمال کرتی ہے۔ اجازتیں سطح پر عنصر سے پہلے اعلان کی جاتی ہیں۔

اعلان کا نحو

ہر اجازت android:name وصف کا استعمال کرتے ہوئے مکمل اجازت کا نام بتانے والے ایک علیحدہ عنصر سے اعلان کی جاتی ہے۔ مخصوص Android ورژن میں متعارف کرائی گئی اجازتوں کے لیے، اعلان کو صرف ضروری ورژن تک محدود کرنے کے لیے maxSdkVersion وصف استعمال کریں — اس سے مطابقت بہتر ہوتی ہے۔

مثال کے طور پر، WRITE_EXTERNAL_STORAGE اجازت Android 10+ (Scoped Storage) پر ضروری نہیں ہے، لہذا maxSdkVersion="28" (Android 9) بتائیں۔ یہ نئے ورژن پر صارفین کے غیر ضروری سوالات کو روکتا ہے۔ Android Studio Lint کے ذریعے تجویز کردہ maxSdkVersion کے بارے میں خبردار کرتا ہے۔

xml
<!-- AndroidManifest.xml -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions (install-time) -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- Dangerous permissions (runtime) -->
    <uses-permission
        android:name="android.permission.CAMERA" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- Legacy storage permission limited to API 28 and below -->
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="28" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <application>
        <!-- ... -->
    </application>
</manifest>

فلٹرنگ کے لیے کا استعمال

عنصر بتاتا ہے کہ ایپلیکیشن کو مخصوص ہارڈویئر (کیمرہ، GPS، NFC) کی ضرورت ہے۔ android:required="false" وصف ایپلیکیشن کو اس ہارڈویئر کے بغیر آلات پر انسٹال کرنے کی اجازت دیتا ہے — دستیابی کوڈ میں چیک کی جاتی ہے۔ اگر required="true" ہے، تو Google Play ایپلیکیشن کو فلٹر کرتا ہے، اسے نامناسب آلات کے لیے ناقابل رسائی بنا دیتا ہے۔

تمام ہارڈویئر فیچرز کے لیے required="false" سیٹ کرنے اور PackageManager.hasSystemFeature() کے ذریعے پروگراماتی طور پر دستیابی چیک کرنے کی سفارش کی جاتی ہے۔ یہ آپ کی ایپلیکیشن کے سامعین کو بڑھاتا ہے۔ واحد استثنا اگر فیچر ایپلیکیشن کے آپریشن کے لیے اہم ہے (GPS کے بغیر ٹیکسی بکنگ ایپ کا کوئی مطلب نہیں ہے)۔

بہترین طرز عمل اور غلطیاں

اجازتوں کا مناسب انتظام Android ایپلیکیشن کے معیار کا ایک اہم پہلو ہے۔ آئیے اہم سفارشات اور عام غلطیوں کا جائزہ لیتے ہیں۔

درخواست کردہ اجازتوں کو کم سے کم کریں

صرف وہ اجازتیں درخواست کریں جو ایپلیکیشن کے آپریشن کے لیے واقعی ضروری ہیں۔ ہر اضافی اجازت تنصیب کی تبدیلی کی شرح کو کم کرتی ہے اور انکار کی تعداد بڑھاتی ہے۔ Google Play Console دکھاتا ہے کہ اجازت کے سیٹ کی وجہ سے کتنے صارفین نے تنصیب سے انکار کیا۔ AppBrain (2024) کے مطابق، 10+ dangerous اجازتوں والی ایپلیکیشنز میں 35% کم تنصیبات ہوتی ہیں۔

باقاعدگی سے اپنی اجازت کی فہرست کا جائزہ لیں۔ غیر استعمال شدہ اجازتیں ہٹائیں، خاص طور پر نئے Android ورژن میں منتقلی کرتے وقت جہاں کچھ اجازتیں اختیاری ہو جاتی ہیں۔ مثال کے طور پر، Android 13+ میں فوٹو پکر (ActivityResultContracts.PickVisualMedia) کے ساتھ، میڈیا لائبریری تک رسائی dangerous READ_MEDIA_IMAGES اجازت کے بغیر حاصل کی جا سکتی ہے۔

درخواست سے پہلے وضاحت دکھائیں

dangerous اجازت کی درخواست کرنے سے پہلے، صارف کو ایک اسکرین دکھائیں جو بتائے کہ اس اجازت کی ضرورت کیوں ہے اور یہ کیا قدر فراہم کرتی ہے۔ Material Design ایک آئیکن، مختصر متن اور «جاری رکھیں» بٹن کے ساتھ نیچے کی شیٹ یا مکالمہ استعمال کرنے کی سفارش کرتا ہے۔ وضاحت براہ راست درخواست کے مقابلے میں رضامندی کو 20-30% بڑھاتی ہے۔

launch() کال کرنے سے پہلے shouldShowRequestPermissionRationale() چیک کریں۔ اگر true ہے، تو وضاحت دکھائیں۔ اگر false ہے، تو یا تو اجازت پہلے ہی دی جا چکی ہے یا صارف نے مستقل طور پر انکار کر دیا ہے (دوبارہ کبھی نہ پوچھیں)۔ بعد کی صورت میں، درخواست دہرانے کے بجائے «ترتیبات کھولیں» بٹن دکھائیں۔

تمام اجازت کے منظرناموں کی جانچ کریں

تمام ممکنہ منظرناموں کی جانچ کریں: اجازت دینا، انکار، مستقل انکار، ترتیبات میں اجازت منسوخ کرنا، اجازت ری سیٹ (Android 11+ خودکار ری سیٹ)۔ ہر منظر نامہ بغیر کریش یا ڈیٹا کے نقصان کے سنبھالا جانا چاہیے۔ Android جانچ گائیڈ جانچ کو خودکار بنانے کے لیے TestPermission لائبریری استعمال کرنے کی سفارش کرتا ہے۔

اس منظر نامے پر خصوصی توجہ دیں جب صارف ایپلیکیشن چلتے ہوئے اجازت منسوخ کرتا ہے (ایپ چھوٹی → ترتیبات → منسوخ)۔ ایپلیکیشن میں واپس آنے پر، onResume() میں تمام اجازتیں دوبارہ چیک کریں۔ اجازت کی حالت کو کیش کرنے پر بھروسہ نہ کریں — صارف اسے کسی بھی وقت تبدیل کر سکتا ہے۔

عام غلطیاں

  • پہلے checkSelfPermission چیک کیے بغیر اجازت کی درخواست — غیر ضروری مکالمہ متحرک کرتا ہے
  • shouldShowRequestPermissionRationale کو نظرانداز کرنا — پہلے انکار کے بعد صارف کے تجربے کو خراب کرتا ہے
  • سیاق و سباق کے بغیر اجازت کی درخواست (صرف «رسائی کی اجازت دیں؟») — رضامندی کم کرتا ہے
  • Android 10+ پر maxSdkVersion کے بغیر WRITE_EXTERNAL_STORAGE استعمال — غیر ضروری درخواست
  • onResume میں اجازت کی جانچ کا فقدان — ترتیبات میں اجازت کی منسوخی سے محروم رہنا

اکثر پوچھے گئے سوالات

کیا مجھے اجازت کا اعلان کرنا ضروری ہے اگر SDK اس کی درخواست کرتا ہے؟

ہاں، اگر SDK اپنے مینی فیسٹ میں اجازت شامل کرتا ہے، تو یہ بلڈ کے وقت ایپلیکیشن مینی فیسٹ کے ساتھ ضم ہو جاتا ہے۔ آپ AndroidManifest.xml میں tools:node="remove" کا استعمال کرتے ہوئے غیر ضروری SDK اجازت کو ہٹا سکتے ہیں۔

اگر میں اجازت کے انکار کو نہ سنبھالوں تو کیا ہوتا ہے؟

اجازت کے بغیر API کال کرنے سے SecurityException پیدا ہوگا، جس سے ایپلیکیشن کریش ہو جائے گی۔ متعلقہ API استعمال کرنے سے پہلے ہمیشہ اجازت کی حیثیت چیک کریں اور انکار کو صحیح طریقے سے سنبھالیں۔

ڈیولپمنٹ کے دوران اجازتیں کیسے ری سیٹ کریں؟

ڈیوائس کی ترتیبات میں: ترتیبات → ایپس → [آپ کی ایپ] → اجازتیں۔ تمام اجازتیں ری سیٹ کرنے کے لیے، adb کمانڈ استعمال کریں: adb shell pm reset-permissions۔

کیا میں Activity کے بغیر اجازت کی درخواست کر سکتا ہوں؟

ہاں، Fragment یا Service میں ActivityResultLauncher استعمال کرکے۔ تاہم، درخواست کے مکالمے کو ہمیشہ Activity UI سیاق و سباق کی ضرورت ہوتی ہے۔ Service کے لیے، آپ درخواست Activity کھولنے والے Intent کے ساتھ اطلاع دکھا سکتے ہیں۔

اجازتوں کے لیے maxSdkVersion کیوں ضروری ہے؟

مثال کے طور پر، WRITE_EXTERNAL_STORAGE Android 10+ (Scoped Storage) پر ضروری نہیں ہے۔ android:maxSdkVersion="28" بتا کر، آپ نئے ورژن پر اجازت کے اعلان کو خارج کر دیتے ہیں، مطابقت بہتر کرتے ہیں اور درخواست کردہ اجازتوں کی فہرست کم کرتے ہیں۔

خلاصہ

  • AndroidManifest Permissions — Android میں سسٹم وسائل تک رسائی کے لیے لازمی اعلانات
  • 4 تحفظ کی سطحیں — normal، dangerous، signature، special مختلف دینے کے میکانزم کے ساتھ
  • Runtime Permissions — dangerous اجازتوں کو رن ٹائم درخواست کی ضرورت ہوتی ہے (Android 6+)
  • اجازت گروپ — ایک گروپ میں ایک اجازت پر رضامندی گروپ کی تمام تک رسائی دیتی ہے
  • وضاحت — درخواست سے پہلے وضاحت دکھانے سے رضامندی 20-30% بڑھ جاتی ہے
  • کم سے کم کرنا — صرف ضروری اجازتیں درخواست کریں اور maxSdkVersion استعمال کریں
  • API کال کرنے سے پہلے ہمیشہ اجازت کی حیثیت چیک کریں اور تمام انکار کے منظرناموں کو سنبھالیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں