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

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

אם הספרייה כוללת תקשורת עם אפליקציה מארחת, למשל שימוש בגבול: Service, כוללים רכיב <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> אחד או יותר. א' רכיב <provider> יכול לכלול רשות ספק אחת או רשימה של רשויות ספקים המופרדות באמצעות נקודה-פסיק.

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

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

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

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

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

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