Ứng dụng Flip dành cho iOS

Liên kết Lật ứng dụng dựa trên OAuth (Lật ứng dụng) mở ứng dụng iOS của bạn từ ứng dụng Google để giúp người dùng ứng dụng Google liên kết tài khoản của họ dễ dàng hơn. Bạn cần thực hiện các thay đổi mã nhỏ đối với ứng dụng iOS của mình để triển khai tính năng này.

Trong tài liệu này, bạn tìm hiểu cách sửa đổi ứng dụng iOS của mình để hỗ trợ App Flip.

Thử mẫu

Flip App ứng dụng mẫu chứng tỏ một tài khoản liên kết tích hợp trên iOS đó là App Flip-tương thích. Bạn có thể sử dụng ứng dụng này để xác minh cách phản hồi với liên kết chung đến App Flip từ các ứng dụng dành cho thiết bị di động của Google.

Ứng dụng mẫu được cấu hình sẵn để tích hợp với các ứng dụng Lật Công cụ thử nghiệm dành cho iOS , mà bạn có thể sử dụng để xác minh tích hợp ứng dụng iOS của mình với App lật trước khi bạn cấu hình tài khoản liên kết với Google. Ứng dụng này mô phỏng liên kết chung được kích hoạt bởi các ứng dụng dành cho thiết bị di động của Google khi bật App Flip.

Làm thế nào nó hoạt động

Sau đây là các bước quy trình mà ứng dụng Google và ứng dụng của bạn thực hiện khi Lật ứng dụng xảy ra:

  1. Ứng dụng Google cố gắng mở liên kết chung của ứng dụng của bạn. Nó có thể mở ứng dụng của bạn nếu nó được cài đặt trên thiết bị của người dùng và được liên kết với liên kết chung. Xem Hỗ trợ Phổ Liên kết để biết chi tiết.

  2. Kiểm tra ứng dụng của bạn rằng client_idredirect_uri tham số mã hóa trong các URL đến phù hợp với liên kết Google phổ mong đợi.

  3. Ứng dụng của bạn yêu cầu mã ủy quyền từ máy chủ OAuth2 của bạn. Khi kết thúc quy trình này, ứng dụng của bạn sẽ trả về mã ủy quyền hoặc lỗi cho ứng dụng Google. Để thực hiện việc này, nó sẽ mở liên kết chung của Google với các tham số được nối thêm cho mã ủy quyền hoặc lỗi.

  4. Ứng dụng Google xử lý liên kết chung của Google đến và tiếp tục với phần còn lại của quy trình. Nếu mã ủy quyền được cung cấp, liên kết sẽ hoàn tất ngay lập tức. Việc trao đổi mã thông báo diễn ra giữa máy chủ với máy chủ, giống như cách nó thực hiện trong luồng liên kết OAuth dựa trên trình duyệt. Nếu mã lỗi được trả về, quy trình liên kết sẽ tiếp tục với các tùy chọn thay thế.

Sửa đổi ứng dụng iOS của bạn để hỗ trợ App Flip

Để hỗ trợ App Flip, hãy thực hiện các thay đổi mã sau đối với ứng dụng iOS của bạn:

  1. Xử lý NSUserActivityTypeBrowsingWeb trong App ủy quyền của bạn.
  2. Capture redirect_uristate thông số từ URL để sử dụng sau này.
  3. Kiểm tra xem redirect_uri trận đấu định dạng này:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Xác minh rằng ID khách hàng khớp với giá trị mong đợi. Sử dụng mẫu mã sau:

    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
        }
    }
    
  5. Sau khi ủy quyền thành công, hãy gọi URI chuyển hướng với mã ủy quyền. Sử dụng mẫu mã sau:

    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)
        }
    }
    
  6. Nếu xảy ra lỗi, hãy đính kèm kết quả lỗi vào URI chuyển hướng. Sử dụng mẫu mã sau:

    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)
        }
    }
    

Khi được ứng dụng Google mở, liên kết chung của ứng dụng của bạn bao gồm các thông số truy vấn sau:

  • client_id ( String ): Google client_id rằng nhân đăng ký theo ứng dụng của bạn.
  • scope ( List of String ): Một danh sách các phạm vi không gian tách ra yêu cầu.
  • state ( String ): Một nonce Google sử dụng để xác minh rằng kết quả ủy quyền là để đáp ứng với yêu cầu đi của Google.
  • redirect_uri ( String ): liên kết phổ biến của Google. URI "lật" để mở ứng dụng Google và chuyển kết quả.

Các tham số được sử dụng khi kết quả ủy quyền được trả về thành công:

  • code ( String ): Giá trị của mã ủy quyền, nếu có.
  • state ( String ): Giá trị chính xác nhận được từ liên kết phổ cập đến.

Các tham số được sử dụng khi kết quả ủy quyền được trả về không thành công:

  • error ( String ), với các giá trị sau:

    • cancelled : Một lỗi thu hồi. Ứng dụng Google sẽ cố gắng liên kết tài khoản bằng URL ủy quyền. Một số ví dụ là người dùng không đăng nhập được, thiết bị đang ngoại tuyến hoặc kết nối hết thời gian chờ.
    • unrecoverable : Một lỗi không thể phục hồi. Ví dụ: người dùng cố gắng liên kết với một tài khoản bị vô hiệu hóa. Ứng dụng Google sẽ hủy liên kết tài khoản.
    • invalid_request : Yêu cầu các thông số không hợp lệ hoặc thiếu. Đây là một lỗi có thể khắc phục được. Ứng dụng Google sẽ cố gắng liên kết tài khoản bằng URL ủy quyền.
    • access_denied : Người dùng từ chối yêu cầu sự đồng ý. Đây là một lỗi không thể khôi phục được; ứng dụng Google hủy liên kết.
  • error_description ( String , không bắt buộc): Một thông báo lỗi người dùng thân thiện.

Sửa đổi điểm cuối ủy quyền của bạn để hỗ trợ Lật ứng dụng

Định cấu hình nền tảng của bạn để chấp nhận các yêu cầu bằng URL chuyển hướng Lật ứng dụng của Google:

  • Trang chủ Google ứng dụng
    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 ứng dụng
    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
    

Kiểm tra xem client_id và URL được chỉ định bởi các redirect_uri thông số phù hợp với các giá trị mong đợi khi một yêu cầu được nhận.