TWA בהגדרה עצמית במצב "כישלון רך" - ממשק משתמש במסך מלא עובד, אך משלחת מקורית נכשלת

אני מנסה להפעיל התראות מקומיות עבור TWA של אתר ה-Discourse העצמי שלי ונתקלתי ב"כישלון רך" מוזר מאוד באימות Digital Asset Link.

להלן התסמינים המדויקים:

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

  2. עם זאת, הודעת Toast “פועל ב-Chrome” מופיעה בכל הפעלה.

  3. והכי חשוב, כאשר ה-PWA מבקש הרשאת התראות, הוא מציג את ההנחיה בסגנון דפדפן, לא את תיבת הדו-שיח המקומית של אנדרואיד. זה מוכיח שהאצלת ה-API המקומית נכשלת.

התנהגות זו עקבית בכל מכשירי הבדיקה (אנדרואיד 12 ו-13) ועם קבצי APK שנוצרו על ידי Bubblewrap וגם על ידי PWABuilder של מיקרוסופט.

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

הנה מה שכבר אימתתי:

  • מפתח חתימה ו-assetlinks.json: טביעת האצבע SHA-256 של android.keystore שלי היא התאמה מדויקת של 100% עם טביעת האצבע בקובץ /.well-known/assetlinks.json החי שלי.

  • תגובת השרת: השרת שלי מגיש את כתובת ה-URL של assetlinks.json עם סטטוס 200 OK, ה-Content-Type הנכון של application/json, וללא כותרות CORS חוסמות כאשר נבדק עם כלים סטנדרטיים של אינטרנט.

  • תצורת אפליקציית אנדרואיד: ה-AndroidManifest.xml שנוצר נכון ומכיל את com.google.androidbrowserhelper.trusted.DelegationService הסטנדרטי.

  • הגדרות מנהל Discourse: הגדרות האבטחה שלי עבור cors origins ו-Allowed crawler user agents ריקות שתיהן.

בהתחשב בהתנהגות “כישלון רך” ספציפית זו, השאלה שלי היא:

האם יש כלל Nginx ידוע, הגדרת חומת אש, או בעיית תגובת שרת עדינה (כמו עיכוב קל או כותרת לא סטנדרטית) בהגדרת ברירת המחדל של Discourse העצמי שתגרום למאמת אנדרואיד להעניק “אמון חלקי” (המאפשר את ממשק המשתמש במסך מלא) אך לדחות את רמת האמון הגבוהה יותר הנדרשת להאצלת API מקומית?

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