App Flip untuk iOS

Penautan Balik Aplikasi berbasis OAuth (App Flip) membuka aplikasi iOS Anda dari aplikasi Google untuk memudahkan pengguna aplikasi Google menautkan akun mereka. Anda perlu membuat sedikit perubahan kode pada aplikasi iOS untuk menerapkan fitur ini.

Dalam dokumen ini, Anda akan mempelajari cara memodifikasi aplikasi iOS untuk mendukung App Flip.

Coba sampel

Aplikasi contoh App Flip menunjukkan integrasi penautan akun di iOS yang kompatibel dengan App Flip. Anda dapat menggunakan aplikasi ini untuk memverifikasi cara merespons aplikasi universal Flip Aplikasi yang masuk tautan dari aplikasi seluler Google.

Aplikasi contoh telah dikonfigurasi sebelumnya untuk berintegrasi dengan Alat Pengujian Balik Aplikasi untuk iOS, yang dapat Anda gunakan untuk memverifikasi integrasi aplikasi iOS dengan App Flip sebelum Anda mengonfigurasi penautan akun dengan Google. Aplikasi ini menyimulasikan link universal dipicu oleh aplikasi seluler Google saat Membalik Aplikasi diaktifkan.

Cara kerjanya

Berikut ini adalah langkah-langkah alur yang diambil aplikasi Google dan aplikasi Anda saat Pembalikan Aplikasi terjadi:

  1. Aplikasi Google akan mencoba membuka link universal aplikasi Anda. Aplikasi ini mampu membuka aplikasi Anda jika diinstal pada perangkat pengguna dan dikaitkan dengan tautan universal. Lihat Mendukung Link Universal untuk mengetahui detailnya.

  2. Aplikasi Anda memeriksa apakah parameter client_id dan redirect_uri dienkode di URL yang masuk cocok dengan tautan universal Google yang diharapkan.

  3. Aplikasi Anda meminta kode otorisasi dari server OAuth2 Anda. Di bagian akhir alur ini, aplikasi Anda mengembalikan kode otorisasi atau kesalahan ke aplikasi Google. Untuk melakukannya, ia membuka tautan universal Google dengan tanda untuk kode otorisasi atau error.

  4. Aplikasi Google menangani tautan universal Google yang masuk dan melanjutkan dengan untuk seluruh alurnya. Jika kode otorisasi diberikan, penautannya akan langsung diselesaikan. Pertukaran token terjadi secara server ke server, proses yang sama seperti dalam alur penautan OAuth berbasis browser. Jika kode error adalah dikembalikan, alur penautan berlanjut dengan opsi alternatif.

Memodifikasi aplikasi iOS Anda untuk mendukung App Flip

Untuk mendukung App Flip, buat perubahan kode berikut pada aplikasi iOS Anda:

  1. Tangani NSUserActivityTypeBrowsingWeb di Delegasi Aplikasi Anda.
  2. Ambil parameter redirect_uri dan state dari URL untuk digunakan nanti.
  3. Pastikan redirect_uri cocok dengan format ini:
    https://oauth-redirect.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
    https://oauth-redirect-sandbox.googleusercontent.com/a/GOOGLE_APP_BUNDLE_ID
  4. Verifikasi bahwa client ID cocok dengan nilai yang diharapkan. Gunakan contoh kode:

    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. Setelah otorisasi berhasil, panggil URI pengalihan dengan otorisasi pada kode sumber. Gunakan contoh kode berikut:

    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. Jika terjadi error, lampirkan hasil error ke URI pengalihan. Gunakan contoh kode berikut:

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

Saat dibuka oleh aplikasi Google, link universal aplikasi Anda mencakup hal berikut parameter kueri:

  • client_id (String): Google client_id yang terdaftar di aplikasi Anda.
  • scope (List of String): Daftar cakupan yang dipisahkan spasi yang diminta.
  • state (String): Nonce yang digunakan oleh Google untuk memverifikasi bahwa otorisasi hasilnya adalah respons terhadap permintaan keluar Google.
  • redirect_uri (String): Link universal Google. "Balik" URI yang akan dibuka aplikasi Google dan meneruskan hasil.

Parameter yang digunakan saat hasil otorisasi berhasil ditampilkan:

  • code (String): Nilai kode otorisasi, jika tersedia.
  • state (String): Nilai tepat yang diterima dari link universal yang masuk.

Parameter yang digunakan saat hasil otorisasi tidak berhasil ditampilkan:

  • error (String), dengan nilai berikut:

    • cancelled: Error yang dapat dipulihkan. Aplikasi Google akan mencoba akun penautan menggunakan URL otorisasi. Beberapa contohnya adalah kegagalan pengguna untuk masuk, perangkat sedang offline, atau waktu koneksi habis.
    • unrecoverable: Error yang tidak dapat dipulihkan. Misalnya, pengguna mencoba menautkan dengan akun yang dinonaktifkan.Aplikasi Google akan membatalkan penautan akun.
    • invalid_request: Parameter permintaan tidak valid atau tidak ada. Ini adalah error yang dapat dipulihkan. Aplikasi Google akan mencoba melakukan penautan akun menggunakan URL otorisasi.
    • access_denied: Pengguna menolak permintaan izin. Ini adalah error yang tidak dapat dipulihkan; aplikasi Google membatalkan penautan.
  • error_description (String, opsional): Pesan error yang mudah digunakan.

Untuk semua jenis error, Anda harus menampilkan data respons ke string yang ditentukan REDIRECT_URI untuk memastikan penggantian yang tepat lebih diprioritaskan.

Mengubah endpoint otorisasi untuk mendukung App Flip

Konfigurasi platform Anda untuk menerima permintaan menggunakan URL alihan App Flip Google:

  • Aplikasi 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
    
  • Aplikasi Asisten Google
    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
    

Pastikan client_id dan URL yang ditentukan oleh parameter redirect_uri mencocokkan nilai yang diharapkan saat permintaan diterima. jika verifikasi klien gagal, tampilkan error invalid_request ke redirect_uri.