קישור App Flip מבוסס-OAuth (App Flip) פותח את האפליקציה ל-iOS מאפליקציה של Google כדי לעזור למשתמשים באפליקציית Google לקשר את החשבון שלהם בקלות רבה יותר. צריך ליצור שינויים קלים בקוד באפליקציה ל-iOS כדי להטמיע את התכונה הזו.
במסמך הזה נסביר איך לשנות את האפליקציה ל-iOS כדי שתתמוך ב-App Flip.
רוצה לנסות את הדוגמה?
אפליקציה לדוגמה שמדגים שילוב של קישור חשבון ב-iOS שתואם ל-App Flip. אפשר להשתמש באפליקציה הזו כדי לאמת איך להגיב ל-App Flip אוניברסלי נכנס מאפליקציות Google לנייד.
האפליקציה לדוגמה מוגדרת מראש לשילוב עם App Flip Test Tool עבור iOS, שבו ניתן להשתמש כדי לאמת את השילוב של אפליקציה ל-iOS עם App Flip לפני איך להגדיר קישור חשבונות ל-Google. האפליקציה הזו מדמה את הקישור האוניברסלי מופעל על ידי אפליקציות של Google לנייד כש-App Flip מופעל.
איך זה עובד
אלה השלבים שאפליקציית Google והאפליקציה שלך מבצעים היפוך האפליקציות:
אפליקציית Google מנסה לפתוח את הקישור האוניברסלי של האפליקציה. יכול לפתוח את האפליקציה אם היא מותקנת במכשיר של המשתמש ושייכת אל את הקישור האוניברסלי. פרטים נוספים זמינים במאמר תמיכה בקישורים אוניברסליים.
האפליקציה בודקת שהפרמטרים
client_id
ו-redirect_uri
מקודדים בכתובת האתר הנכנסת תואם לקישור האוניברסלי של Google.האפליקציה מבקשת קוד הרשאה משרת OAuth2. בסוף בתהליך הזה, האפליקציה מחזירה קוד הרשאה או שגיאה אפליקציית Google. לשם כך, נפתח הקישור האוניברסלי של Google עם צירוף עבור קוד ההרשאה או השגיאה.
אפליקציית Google מטפלת בקישור האוניברסלי של Google הנכנס וממשיכה עם את שאר הזרימה. אם תספקו קוד הרשאה, הקישור הושלמה באופן מיידי. המרת האסימון מתבצעת משרת לשרת, באופן זהה כפי שהוא עושה בתהליך הקישור של OAuth המבוסס על דפדפן. אם קוד שגיאה הוא שהוחזר, תהליך הקישור ממשיך עם האפשרויות החלופיות.
שינוי האפליקציה ל-iOS כדי לתמוך ב-App Flip
כדי לתמוך ב-App Flip, צריך לבצע את השינויים הבאים בקוד באפליקציה ל-iOS:
- צריך לטפל ב-
NSUserActivityTypeBrowsingWeb
בתכונה 'הענקת גישה לאפליקציה'. - צריך לתעד את הפרמטרים
redirect_uri
ו-state
מכתובת ה-URL כדי להשתמש בהם מאוחר יותר. - צריך לוודא שהשדה
redirect_uri
תואם לפורמט הזה:https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
מוודאים שמזהה הלקוח תואם לערך הצפוי. צריך להשתמש בהגדרות הבאות דוגמת קוד:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL, let components = URLComponents(url: incomingURL, resolvingAgainstBaseURL: false), let params = components.queryItems else { return false } if let clientId = params.filter({$0.name == "client_id"}).first?.value, let state = params.filter({$0.name == "state"}).first?.value, let redirectUri = params.filter({$0.name == "redirect_uri"}).first?.value { // Save the redirect_uri and state for later... // Verify the client id return (clientId == GOOGLE_CLIENT_ID) } else { // Missing required parameters return false } }
לאחר קבלת ההרשאה, יש להפעיל את ה-URI להפניה אוטומטית עם ההרשאה צריך להשתמש בדוגמת הקוד הבאה:
func returnAuthCode(code: String, state: String, redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramAuthCode = URLQueryItem(name: "code", value: code) let paramState = URLQueryItem(name: "state", value: state) components?.queryItems = [paramAuthCode, paramState] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }
אם אירעה שגיאה, יש לצרף תוצאת שגיאה ל-URI של ההפניה האוטומטית. צריך להשתמש בדוגמת הקוד הבאה:
func returnError(redirectUri: String) { var redirectURL = URL(string: redirectUri) var components = URLComponents(url: redirectURL, resolvingAgainstBaseURL: false) // Return the authorization code and original state let paramError = URLQueryItem(name: "error", value: "invalid_request") let paramDescription = URLQueryItem(name: "error_description", value: "Invalid Request") components?.queryItems = [paramError, paramDescription] if let resultURL = components?.url { UIApplication.shared.open( resultURL, options: [UIApplicationOpenURLOptionUniversalLinksOnly : true], completionHandler: nil) } }
פרמטרים של שאילתות לקישור האוניברסלי של האפליקציה
כשנפתחת על ידי אפליקציית Google, הקישור האוניברסלי של האפליקציה כולל את הדברים הבאים פרמטרים של שאילתה:
client_id
(String
): Googleclient_id
שרשום באפליקציה שלך.scope
(List of String
): התקבלה בקשה לרשימה של היקפים המופרדים ברווחים.state
(String
): צופן חד-פעמי ש-Google משתמשת בו כדי לאמת שההרשאה בתגובה לבקשה היוצאת של Google.redirect_uri
(String
): הקישור האוניברסלי של Google. "היפוך" URI לפתיחה אפליקציית Google ולהעביר את התוצאות.
פרמטרים של שאילתות לקישור האוניברסלי של Google
הפרמטרים שנעשה בהם שימוש כאשר תוצאת ההרשאה מוחזרת בהצלחה:
code
(String
): הערך של קוד ההרשאה, אם יש כזה.state
(String
): הערך המדויק שהתקבל מהקישור האוניברסלי הנכנס.
הפרמטרים שנעשה בהם שימוש כאשר תוצאת ההרשאה מוחזרת ללא הצלחה:
error
(String
), עם הערכים הבאים:cancelled
: שגיאה שניתנת לשחזור. אפליקציית Google תנסה להיכנס לחשבון בקישור באמצעות כתובת ה-URL של ההרשאה. כמה דוגמאות הן שגיאות של המשתמשים להיכנס, מכשיר במצב אופליין או שתם הזמן הקצוב לתפוגה של החיבור.unrecoverable
: שגיאה שבעקבותיה אי אפשר לשחזר אותו. לדוגמה, המשתמש מנסה לקשר לחשבון מושבת.אפליקציית Google תבטל את קישור החשבונות.invalid_request
: הפרמטרים של הבקשה לא תקינים או חסרים. זו שגיאה שניתנת לשחזור. אפליקציית Google תנסה לקשר את החשבונות באמצעות כתובת ה-URL של ההרשאה.access_denied
: המשתמש דחה את בקשת ההסכמה. זו שגיאה שבעקבותיה אי אפשר לשחזר אותו. אפליקציית Google מבטלת את הקישור.
error_description
(String
, אופציונלי): הודעת שגיאה ידידותית למשתמש.
בכל סוגי השגיאות צריך להחזיר את נתוני התגובות שצוינו
REDIRECT_URI
כדי להבטיח שהחלופה המתאימה מופעלת.
שינוי נקודת הקצה להרשאה כדי לתמוך ב-App Flip
מגדירים את הפלטפורמה לקבלת בקשות באמצעות כתובות ה-URL להפניה אוטומטית של Google App Flip:
- אפליקציית Google Home
https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.Chromecast https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.Chromecast
- אפליקציית Google Assistant
https://oauth-redirect.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect.googleusercontent.com/a/com.google.OPA https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.dev https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA.enterprise https://oauth-redirect-sandbox.googleusercontent.com/a/com.google.OPA
צריך לוודא ש-client_id
וכתובת ה-URL שצוינו על ידי הפרמטר redirect_uri
תואמים לערכים המצופים כשבקשה מתקבלת. אם האימות של הלקוח
נכשל, מחזירה את השגיאה invalid_request
ל-redirect_uri
.