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

כשיוצרים אפליקציה, חשוב לקחת בחשבון את האפליקציות האחרות במכשיר שהאפליקציה צריכה ליצור איתן אינטראקציה. אם האפליקציה שלכם מטרגטת ל-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. לרכיב <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.