تقديم بيان إذن الوصول إلى الحزمة

عند إنشاء تطبيقك، من المهم مراعاة التطبيقات الأخرى على الجهاز التي يحتاج تطبيقك إلى التفاعل معها. إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، يجعل النظام بعض التطبيقات مرئية لتطبيقك تلقائيًا، ولكنه يزيل التطبيقات الأخرى تلقائيًا. يوضّح هذا الدليل كيفية جعل هذه التطبيقات الأخرى مرئية لتطبيقك.

إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android أو إصدارًا أحدث وكان يحتاج إلى التفاعل مع تطبيقات غير التطبيقات التي تظهر تلقائيًا، أضِف العنصر <queries> فيملف بيان تطبيقك. ضمن العنصر <queries>، حدِّد التطبيقات الأخرى حسب اسم الحزمة أو حسب توقيع النية أو حسب هيئة الموفّر، كما هو موضّح في المقاطع التالية.

أسماء حِزم محدّدة

إذا كنت تعرف التطبيقات المحدّدة التي تريد الاستعلام عنها أو التفاعل معها، مثل التطبيقات التي يتم دمجها مع تطبيقك أو التطبيقات التي تستخدم خدماتها، يمكنك تضمين أسماء حِزمها في مجموعة من عناصر <package> داخل عنصر <queries>:

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

التواصل مع تطبيق مضيف في مكتبة

إذا كنت تُطوّر مكتبة Android، يمكنك تحديد متطلبات مستوى الوصول إلى الحزمة من خلال إضافة عنصر <queries> في ملف بيان AAR. يمتلك عنصر <queries> هذه الوظيفة نفسها التي يمتلكها العنصر الذي يمكن للتطبيقات الإفصاح عنه في بياناتها.

إذا كانت مكتبتك تتضمّن تواصلًا مع تطبيق مضيف، مثل استخدام خدمة مرتبطة، أدرِج عنصر <package> الذي يحدِّد اسم حزمة التطبيق المضيف:

<!-- Place inside the <queries> element. -->
<package android:name=PACKAGE_NAME />

من خلال تضمين هذا البيان، يمكنك التحقّق مما إذا كان التطبيق المضيف مثبّتًا والتفاعل معه، مثلاً من خلال الاتصال بالرقم bindService(). نتيجةً لهذا التفاعل، يصبح تطبيق الاتصال الذي يستخدم مكتبتك مرئيًا تلقائيًا للتطبيق المضيف.

الحِزم التي تتطابق مع توقيع فلتر أهداف

قد يحتاج تطبيقك إلى إجراء طلب بحث أو التفاعل مع مجموعة من التطبيقات التي تخدم هدفًا معيّنًا، ولكن قد لا تعرف أسماء الحِزم المحدّدة التي يجب إدراجها. في هذه الحالة، يمكنك إدراج توقيعات فلاتر الأهداف في عنصر <queries>. يمكن لتطبيقك بعد ذلك اكتشاف التطبيقات التي تحتوي على عناصر <intent-filter> متطابقة.

يعرض مثال الرمز البرمجي التالي عنصر <intent> الذي يسمح للتطبيق بعرض التطبيقات المثبّتة الأخرى التي تتيح مشاركة صور JPEG:

<manifest package="com.example.game">
    <queries>
        <intent>
            <action android:name="android.intent.action.SEND" />
            <data android:mimeType="image/jpeg" />
        </intent>
    </queries>
    ...
</manifest>

يتضمّن عنصر <intent> بعض القيود:

  • يجب تضمين عنصر <action> واحد بالضبط.
  • لا يمكنك استخدام سمات path أو pathPrefix أو pathPattern أو port في عنصر <data>. يتصرّف النظام كما لو كنت قد ضبطت قيمة كل سمة على الحرف النائب العام (*).
  • لا يمكنك استخدام سمة mimeGroup لعنصر <data>.
  • ضمن عناصر <data> لعنصر <intent> واحد، يمكنك استخدام كل من السمات التالية مرة واحدة بحد أقصى:

    • mimeType
    • scheme
    • host

    يمكنك توزيع هذه السمات على عناصر <data> متعددة أو استخدام ها في عنصر <data> واحد.

يتيح العنصر <intent> استخدام حرف البدل العام (*) كقيمة لبعض السمات:

  • سمة name للعنصر <action>
  • النوع الفرعي لسمة mimeType لعنصر <data> (image/*).
  • نوع سمة mimeType وفئة سمة mimeType لعنصر <data> (*/*).
  • سمة scheme لعنصر <data>
  • سمة host لعنصر <data>

لا يتيح النظام استخدام مزيج من النصوص وأحرف البدل، مثل prefix*، ما لم يُحدَّد خلاف ذلك في القائمة السابقة.

الحِزم التي تستخدم جهة إصدار معيّنة

إذا كنت بحاجة إلى طلب معلومات من موفّر محتوى ولكن لا تعرف أسماء الحِزم المحدّدة، يمكنك تحديد هيئة موفّر المحتوى في عنصر <provider>، كما هو موضّح في المقتطف التالي:

<manifest package="com.example.suite.enterprise">
    <queries>
        <provider android:authorities="com.example.settings.files" />
    </queries>
    ...
</manifest>

يمكنك الإفصاح عن سلطات مقدّمي الخدمات في عنصر <queries> واحد. ضمن العنصر <queries>، يمكنك تحديد عنصر <provider> واحد أو أكثر. يمكن أن يتضمّن عنصر <provider> جهة مقدّمة واحدة أو قائمة مفصولة بنقطتَي فاصلة لجهات مقدّمة.

جميع التطبيقات (لا يُنصح به)

في حالات نادرة، قد يحتاج تطبيقك إلى طلب بيانات من جميع التطبيقات المثبّتة على جهاز معيّن أو التفاعل معها، بغض النظر عن المكوّنات التي تحتوي عليها. للسماح لتطبيقك بالاطّلاع على جميع التطبيقات المثبّتة الأخرى، يقدّم النظام إذن QUERY_ALL_PACKAGES.

في ما يلي بعض الأمثلة على حالات الاستخدام التي يكون فيها إذن QUERY_ALL_PACKAGES مناسبًا لإدراجه:

  • تطبيقات مخصّصة لتسهيل الاستخدام
  • المتصفحات
  • تطبيقات إدارة الأجهزة
  • تطبيقات الأمان
  • تطبيقات مكافحة الفيروسات

ومع ذلك، من الممكن عادةً تلبية حالات استخدام تطبيقك من خلال التفاعل مع مجموعة التطبيقات التي تكون مرئية تلقائيًا وعبر الإفصاح عن التطبيقات الأخرى التي يحتاج تطبيقك إلى الوصول إليها في ملف البيان. للحفاظ على خصوصية المستخدم، يجب أن يطلب تطبيقك الحد الأدنى من إذن الوصول إلى الpackage اللازم لكي يعمل تطبيقك.

يقدّم هذا التعديل على السياسة من Google Play إرشادات للتطبيقات التي تحتاج إلى إذن QUERY_ALL_PACKAGES.