Android için Uygulama Çevirme

OAuth tabanlı App Flip bağlantısı (App Flip), Android uygulamanızı Google Hesabı Bağlantısı akışı. Geleneksel hesap bağlama akışı, kullanıcının kimlik bilgilerini tarayıcıya girmesidir. Uygulama Çevir'in kullanılması, oturum açmanızı sağlar. Bu, mevcut Google Ads hesabınızdaki mevcut izin verir. Kullanıcı uygulamanızda oturum açmışsa şunu yapması gerekmez: hesabını bağlamak için kimlik bilgilerini yeniden girmelidir. Minimum miktarda kod Uygulama Çevir'i Android uygulamanızda kullanmak için değişiklik yapılması gerekiyor.

Bu dokümanda, Android uygulamanızı Uygulama Çevir.

Örneği dene

örnek uygulamayı bağlayan Uygulama Çevir , Android'de App Flip uyumlu hesap bağlama entegrasyonunu gösterir. Siz gelen Uygulama Çevirme amacına nasıl yanıt verileceğini doğrulamak için bu uygulamayı kullanabilir. Google mobil uygulamaları.

Örnek uygulama, App Flip Test Tool ile entegrasyon için önceden yapılandırılmıştır. Android, Android uygulamanızın Uygulama ile entegrasyonunu doğrulamak için kullanabilirsiniz Google ile hesap bağlamayı yapılandırmadan önce çevirin. Bu uygulama niyetini görebilirsiniz.

İşleyiş şekli

App Flip entegrasyonunu gerçekleştirmek için aşağıdaki adımlar gereklidir:

  1. Google uygulaması, uygulamanızın cihazda paket adını tıklayın.
  2. Google uygulaması, paket imza kontrolünden yararlanarak doğru uygulama olduğundan emin olun.
  3. Google uygulaması, uygulamanızda belirli bir etkinlik başlatmak için bir amaç oluşturur. Bu amaç, bağlantı oluşturmak için gereken ek verileri içeriyor. Ayrıca, uygulamanızın App Flip'i destekleyip desteklemediğini öğrenmek için Android çerçevesi.
  4. Uygulamanız, isteğin Google uygulamasından geldiğini doğrular. Bunun için, uygulamanız paket imzasını ve sağlanan istemci kimliğini kontrol eder.
  5. Uygulamanız, OAuth 2.0 sunucunuzdan bir yetkilendirme kodu istiyor. Şurada: bu akışın sonunda bir yetkilendirme kodu veya Google uygulaması.
  6. Google uygulaması sonucu alır ve hesap bağlamaya devam eder. Eğer bir yetkilendirme kodu sağlanırsa jeton değişimi gerçekleşir. Bu, tarayıcı tabanlı OAuth bağlama yönteminde olduğu gibi, sunucudan sunucuya akışı sağlar.

Android uygulamanızı, App Flip'i destekleyecek şekilde değiştirme

App Flip'i desteklemek için Android uygulamanızda aşağıdaki kod değişikliklerini yapın:

  1. AndroidManifest.xml dosyanıza işlemle birlikte <intent-filter> ekleyin Uygulama Çevirme Amacı alanına girdiğiniz değerle eşleşen dizedir.

    <activity android:name="AuthActivity">
      <!-- Handle the app flip intent -->
      <intent-filter>
        <action android:name="INTENT_ACTION_FROM_CONSOLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
    </activity>
    
  2. Görüşme uygulamasının imzasını doğrulayın.

    private fun verifyFingerprint(
            expectedPackage: String,
            expectedFingerprint: String,
            algorithm: String
    ): Boolean {
    
        callingActivity?.packageName?.let {
            if (expectedPackage == it) {
                val packageInfo =
                    packageManager.getPackageInfo(it, PackageManager.GET_SIGNATURES)
                val signatures = packageInfo.signatures
                val input = ByteArrayInputStream(signatures[0].toByteArray())
    
                val certificateFactory = CertificateFactory.getInstance("X509")
                val certificate =
                    certificateFactory.generateCertificate(input) as X509Certificate
                val md = MessageDigest.getInstance(algorithm)
                val publicKey = md.digest(certificate.encoded)
                val fingerprint = publicKey.joinToString(":") { "%02X".format(it) }
    
                return (expectedFingerprint == fingerprint)
            }
        }
        return false
    }
    
  3. Intent parametrelerinden Client-ID'yi çıkarın ve istemcinin Kimlik, beklenen değerle eşleşiyor.

    private const val EXPECTED_CLIENT = "<client-id-from-actions-console>"
    private const val EXPECTED_PACKAGE = "<google-app-package-name>"
    private const val EXPECTED_FINGERPRINT = "<google-app-signature>"
    private const val ALGORITHM = "SHA-256"
    ...
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        val clientId = intent.getStringExtra("CLIENT_ID")
    
        if (clientId == EXPECTED_CLIENT &&
            verifyFingerprint(EXPECTED_PACKAGE, EXPECTED_FINGERPRINT, ALGORITHM)) {
    
            // ...authorize the user...
        }
    }
    
  4. Başarılı bir yetkilendirmenin ardından, oluşturulan yetkilendirme kodunu geri döndürün Google'a otomatik olarak gönderin.

    // Successful result
    val data = Intent().apply {
        putExtra("AUTHORIZATION_CODE", authCode)
    }
    setResult(Activity.RESULT_OK, data)
    finish()
    
  5. Bir hata oluşursa bunun yerine hata sonucu döndürün.

    // Error result
    val error = Intent().apply {
        putExtra("ERROR_TYPE", 1)
        putExtra("ERROR_CODE", 1)
        putExtra("ERROR_DESCRIPTION", "Invalid Request")
    }
    setResult(-2, error)
    finish()
    

Kullanıma sunma amacının içeriği

Uygulamanızı başlatan Android intent, aşağıdaki alanları içerir:

  • CLIENT_ID (String): Uygulamanızda kayıtlı Google client_id.
  • SCOPE (String[]): İstenen kapsamların listesi.
  • REDIRECT_URI (String): Yönlendirme URL'si.

Yanıt verilerinin içeriği

Google uygulamasına döndürülen veriler, setResult() çağrısı yapılarak uygulamanızda ayarlanır. Bu veriler şunları içerir:

  • AUTHORIZATION_CODE (String): Yetkilendirme kodunun değeri.
  • resultCode (int): Sürecin başarılı olup olmadığını iletir ve şu değerlerden birini alır:
    • Activity.RESULT_OK: Başarılı olduğunu gösterir; bir yetkilendirme kodu döndürülür.
    • Activity.RESULT_CANCELLED: Kullanıcının bahsedeceğim. Bu durumda Google uygulaması, yetkilendirme URL'niz.
    • -2: Bir hata oluştuğunu belirtir. Farklı hata türleri aşağıda açıklanmıştır.
  • ERROR_TYPE (int): Aşağıdakilerden birini alan hatanın türü değerleri:
    • 1: Kurtarılabilir hata: Google uygulaması, hesap bağlama işlemini yetkilendirme URL'si.
    • 2: Kurtarılamayan hata: Google uygulaması, hesap bağlama işlemini iptal ediyor.
    • 3: Geçersiz veya eksik istek parametreleri.
  • ERROR_CODE (int): Hatanın yapısını temsil eden bir tam sayı. Görmek için Daha fazla bilgi için hata kodları tablosunu inceleyin.
  • ERROR_DESCRIPTION (String, isteğe bağlı): İnsan tarafından okunabilir durum mesajı bir kontrol listesidir.

Şu durumda AUTHORIZATION_CODE için bir değer beklenir: resultCode == Activity.RESULT_OK. Diğer tüm durumlarda, AUTHORIZATION_CODE boş olmalıdır. resultCode == -2 ise ERROR_TYPE değerinin doldurulması bekleniyor.

Hata kodları tablosu

Aşağıdaki tabloda, farklı hata kodları ve her birinin kurtarılabilir veya düzeltilemeyen bir hata olup olmadığı gösterilmektedir:

Hata kodu Anlamı Kurtarılabilir Kurtarılamaz
1 INVALID_REQUEST
2 NO_INTERNET_CONNECTION
3 OFFLINE_MODE_ACTIVE
4 CONNECTION_TIMEOUT
5 INTERNAL_ERROR
6 AUTHENTICATION_SERVICE_UNAVAILABLE
8 CLIENT_VERIFICATION_FAILED
9 INVALID_CLIENT
10 INVALID_APP_ID
11 INVALID_REQUEST
12 AUTHENTICATION_SERVICE_UNKNOWN_ERROR
13 AUTHENTICATION_DENIED_BY_USER
14 CANCELLED_BY_USER
15 FAILURE_OTHER
16 USER_AUTHENTICATION_FAILED

Tüm hata kodları için hata sonucunu setResult üzerinden şu adrese döndürmelisiniz: uygun yedeğin üçlü olarak ayarlandığından emin olun.