הרשאה בתחילת ההפעלה של התראות

ב-Android 13 (רמת API‏ 33) ואילך יש תמיכה בהרשאה בתחילת ההפעלה לשליחת התראות שלא פטורות (כולל שירותים שפועלים בחזית (FGS)) מאפליקציה: POST_NOTIFICATIONS. השינוי הזה עוזר למשתמשים להתמקד בהתראות שהכי חשובות להם.

אנחנו ממליצים מאוד לטרגט ל-Android 13 ואילך בהקדם האפשרי כדי ליהנות מהשליטה והגמישות הנוספות שהתכונה הזו מספקת. אם תמשיכו לטרגט ל-12L (רמת API‏ 32) או לגרסאות קודמות, תאבדו חלק מהגמישות בבקשת ההרשאה בהקשר של הפונקציונליות של האפליקציה.

הצהרה על ההרשאה

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

ההרשאה שצריך להצהיר עליה בקובץ המניפסט של האפליקציה מופיעה בקטע הקוד הבא:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

היכולות של האפליקציה תלויות באפשרויות בחירה למשתמשים בתיבת הדו-שיח של ההרשאות

בתיבת הדו-שיח הזו, המשתמשים יכולים לבצע את הפעולות הבאות:

בקטעים הבאים מתוארת ההתנהגות של האפליקציה, בהתאם לפעולה שהמשתמש מבצע.

המשתמש בוחר באפשרות "אישור"

אם המשתמש בוחר באפשרות אישור, האפליקציה יכולה:

המשתמש בוחר באפשרות "לא לאפשר"

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

המשתמש מחליק כדי לסגור את תיבת הדו-שיח

אם המשתמש מחליק את תיבת הדו-שיח הצידה, כלומר לא בוחר באפשרות אישור או אין אישור, המצב של ההרשאה לשליחת התראות לא משתנה.

השפעות על אפליקציות שהותקנו לאחרונה

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

המועד שבו תיבת הדו-שיח של ההרשאות מופיעה מבוסס על גרסת ה-SDK של היעד באפליקציה:

  • אם האפליקציה מטרגטת את Android מגרסה 13 ואילך, יש לכם שליטה מלאה על הזמן שבו תוצג תיבת הדו-שיח של ההרשאה. כדאי לנצל את ההזדמנות הזו כדי להסביר למשתמשים למה האפליקציה צריכה את ההרשאה הזו, ולעודד אותם להעניק אותה.
  • אם האפליקציה מטרגטת את 12L (רמת API‏ 32) ומטה, המערכת מציגה את תיבת הדו-שיח של ההרשאה בפעם הראשונה שהאפליקציה מתחילה פעילות אחרי שיוצרים ערוץ התראות, או כשהאפליקציה מתחילה פעילות ואז יוצרת את ערוץ ההתראות הראשון שלה. בדרך כלל זה קורה כשהאפליקציה מופעלת. באפליקציות עם פעילות אחת, כמו רוב האפליקציות של Compose, המערכת מציגה את תיבת הדו-שיח כשה-MainActivity מתחילה.

ההשפעה על עדכונים של אפליקציות קיימות

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

דרישות הסף למתן הרשאות מראש

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

אם המשתמש השבית את ההתראות של האפליקציה במכשיר עם Android 12L או גרסה ישנה יותר, ההשבתה תישאר גם אחרי שהמכשיר ישודרג ל-Android 13 או לגרסה חדשה יותר.

פטורים

בקטע הזה מפורטות ההתראות והאפליקציות שפטורות מהשינוי בהתנהגות של ההרשאה לשליחת התראות. ב-Android 13 (רמת API‏ 33) ומעלה, אם המשתמש דוחה את ההרשאה לשליחת התראות, הוא עדיין רואה הודעות שקשורות לשירותים שפועלים בחזית במנהל המשימות, אבל לא רואה אותן בחלונית ההתראות.

סשנים של מדיה

התראות שקשורות לסשנים של מדיה פטורות מהשינוי הזה בהתנהגות.

אפליקציות שמוגדרות לניהול עצמי של שיחות טלפון

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

המערכת מחשיבה את האפליקציה ככזו שהוגדרה לניהול עצמי של שיחות טלפון אם היא מבצעת את כל הפעולות הבאות:

  1. מצהירה על ההרשאה MANAGE_OWN_CALLS.
  2. מטמיע את הממשק ConnectionService.
  3. נרשמת אצל ספק הטלקום של המכשיר באמצעות קריאה ל-registerPhoneAccount().

בדיקת האפליקציה

אתם יכולים לבדוק איך ההרשאה לשליחת התראות משפיעה על האפליקציה שלכם בפעם הראשונה שמשתמשים בה במכשיר עם Android מגרסה 13 ואילך. הקבוצות הבאות של פקודות Android Debug Bridge (ADB)‎ מאפשרות לכם לדמות את הרצפים הנפוצים ביותר של אפשרויות בחירה למשתמשים ושדרוגי המכשירים, בלי שתצטרכו לאפס את מכשיר הבדיקה:

  • האפליקציה הותקנה לאחרונה במכשיר עם Android 13 ואילך:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    
  • המשתמש משאיר את ההתראות מופעלות כשהאפליקציה מותקנת במכשיר עם גרסה 12L או גרסה ישנה יותר, ואז המכשיר משודרג ל-Android מגרסה 13 ואילך:

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    
  • המשתמש משבית את ההתראות באופן ידני כשהאפליקציה מותקנת במכשיר עם Android 12L או גרסה ישנה יותר, ואז המכשיר משודרג ל-Android 13 ואילך:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
    

שיטות מומלצות

בקטע הזה מתוארות כמה דרכים שבהן אפשר להשתמש בהרשאה החדשה לשליחת התראות בצורה הכי יעילה באפליקציה.

עדכון גרסת ה-SDK של היעד באפליקציה

כדי שהאפליקציה תהיה גמישה יותר לגבי מועד ההצגה של תיבת הדו-שיח של ההרשאה, צריך לעדכן את האפליקציה כך שהיא תטרגט ל-Android בגרסה 13 ואילך.

המתנה להצגת בקשה להרשאה לשליחת התראות

לפני שאתם מבקשים מהמשתמשים לתת הרשאות, תנו להם להכיר את האפליקציה.

משתמשים חדשים אולי ירצו לחקור את האפליקציה ולהבין בעצמם את היתרונות של כל בקשה להצגת התראות. אתם יכולים להפעיל בקשת הרשאות מפעולת משתמש. ברשימה הבאה מוצגות כמה דוגמאות למקרים שבהם כדאי להציג את בקשת ההרשאה לשליחת התראות:

  • המשתמש לוחץ על כפתור "פעמון ההתראות".
  • המשתמש בוחר לעקוב אחרי חשבון של מישהו ברשת חברתית.
  • המשתמש שולח הזמנה למשלוח אוכל.

באיור 1 מוצג תהליך עבודה מומלץ לבקשת הרשאה לשליחת התראות. אם shouldShowRequestPermissionRationale() לא מחזיר את הערך true, האפליקציה לא צריכה להציג את המסך האמצעי – זה עם הכותרת "Get notified!‎". ב-Compose, אפשר למצוא את ה-Activity הנוכחי על ידי גישה אל LocalContext.current והמרה שלו ל-Activity.

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

אחרי שהמשתמש נכנס לחשבון, מוצגת לו הזמנה לקבל התראות על עדכונים לגבי הנסיעה. אחרי שהמשתמש לוחץ על הכפתור &quot;אני רוצה&quot;, האפליקציה מבקשת את ההרשאה החדשה, ומופיעה תיבת הדו-שיח של המערכת.
איור 1. תהליך עבודה מומלץ שמופעל על ידי המשתמש כדי לבקש הרשאה לשליחת התראות. המסך האמצעי נדרש רק אם shouldShowRequestPermissionRationale() מחזירה true.

בקשת הרשאה

כדי לבקש את ההרשאה בממשק המשתמש של Compose, משתמשים ב-API‏ rememberLauncherForActivityResult() עם החוזה ActivityResultContracts.RequestPermission().

בקטע הקוד הבא אפשר לראות איך לבקש הרשאה לשליחת התראות בתגובה לאינטראקציה של המשתמש:

Kotlin

val context = LocalContext.current
val permissionLauncher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // Permission granted, you can now send notifications.
    } else {
        // Permission denied, handle accordingly.
    }
}

// ... in your UI ...
Button(onClick = {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}) {
    Text("Enable Notifications")
}

בקשת ההרשאה בהקשר הרלוונטי

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

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

איך בודקים אם האפליקציה יכולה לשלוח התראות

לפני שהאפליקציה שולחת התראה, צריך לבדוק אם המשתמש הפעיל את ההתראות באפליקציה. כדי לעשות את זה, צריך להפעיל את areNotificationsEnabled().

שימוש אחראי בהרשאה

אחרי שתקבלו אישור לשלוח התראות, חשוב שתשתמשו בהרשאה הזו באופן אחראי. המשתמשים יכולים לראות את מספר ההתראות היומיות שהאפליקציה שולחת, והם יכולים לבטל את ההרשאה בכל שלב.