הצהרה על צורכי הרשאות גישה לחבילה

כשיוצרים אפליקציה, חשוב לקחת בחשבון את האפליקציות האחרות במכשיר שהאפליקציה צריכה ליצור איתן אינטראקציה. אם האפליקציה שלכם מטרגטת ל-Android 11 (רמת API 30) ואילך, המערכת חושפת חלק מהאפליקציות לאפליקציה שלכם באופן אוטומטי, אבל מסננת אפליקציות אחרות כברירת מחדל. במדריך הזה נסביר איך לגרום לאפליקציות האחרות להיות גלויות לאפליקציה שלכם.

אם האפליקציה שלכם מיועדת ל-Android 11 ומעלה, והיא צריכה ליצור אינטראקציה עם אפליקציות אחרות מלבד אלה שגלויות באופן אוטומטי, צריך להוסיף את הרכיב <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 manifest. לרכיב <queries> הזה יש את אותה פונקציונליות כמו לרכיב שאפליקציות יכולות להצהיר עליו במניפסטים שלהן.

אם הספרייה כוללת תקשורת עם אפליקציית מארח, למשל באמצעות שירות קשור, צריך לכלול רכיב <package> שמציין את שם החבילה של אפליקציית המארח:

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

ההצהרה הזו מאפשרת לבדוק אם אפליקציית המארח מותקנת ולבצע אינטראקציה איתה, למשל להתקשר אל bindService(). האפליקציה שקוראת לספרייה מוצגת באופן אוטומטי לאפליקציית המארח כתוצאה מהאינטראקציה הזו.

חבילות שתואמות לחתימה של מסנן Intent

יכול להיות שהאפליקציה שלכם תצטרך לשלוח שאילתות או ליצור אינטראקציה עם קבוצה של אפליקציות שמשרתות מטרה מסוימת, אבל יכול להיות שלא תדעו אילו שמות חבילות ספציפיים לכלול. במקרה כזה, אפשר לרשום חתימות של מסנני כוונות באלמנט <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 של רכיב <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> אחד או יותר. רכיב A <provider> יכול לכלול רשות אחת של ספק או רשימה של רשויות של ספקים שמופרדות באמצעות נקודה-פסיק.

כל האפליקציות (לא מומלץ)

במקרים נדירים, יכול להיות שהאפליקציה שלכם תצטרך לשלוח שאילתה או לבצע אינטראקציה עם כל האפליקציות המותקנות במכשיר, ללא קשר לרכיבים שהן מכילות. כדי לאפשר לאפליקציה לראות את כל האפליקציות האחרות שמותקנות, המערכת מספקת את ההרשאה QUERY_ALL_PACKAGES.

דוגמאות לתרחישי שימוש שבהם מתאים לכלול את ההרשאה QUERY_ALL_PACKAGES:

  • אפליקציות לנגישות
  • דפדפנים
  • אפליקציות לניהול מכשירים
  • אפליקציות אבטחה
  • אפליקציות אנטי-וירוס

עם זאת, בדרך כלל אפשר לממש את תרחישי השימוש באפליקציה באמצעות אינטראקציה עם קבוצת האפליקציות שגלויות באופן אוטומטי , ועל ידי הצהרה על האפליקציות האחרות שהאפליקציה צריכה לגשת אליהן בקובץ המניפסט. כדי לכבד את פרטיות המשתמשים, האפליקציה צריכה לבקש את כמות ההרשאות המינימלית שנדרשת כדי שהיא תפעל.

העדכון הזה במדיניות של Google Play כולל הנחיות לאפליקציות שזקוקות להרשאה QUERY_ALL_PACKAGES.