Android İçin Uygulama Çevirme

OAuth tabanlı Uygulama Çevirme bağlantısı (Uygulama Çevirme), Android uygulamanızı Google Hesabı Bağlantısı akışına ekler. Geleneksel bir hesap bağlama akışı, kullanıcının tarayıcıya kimlik bilgilerini girmesini gerektirir. App Flip kullanımı, Android uygulamanızda kullanıcının oturum açmasını erteler ve bu, mevcut yetkilendirmelerden yararlanmanıza olanak tanır. Kullanıcı uygulamanızda oturum açtıysa hesabını bağlamak için kimlik bilgilerini yeniden girmesi gerekmez. Android uygulamanızda App Flip'i uygulamak için minimum miktarda kod değişikliği gerekir.

Bu belgede, Android uygulamanızı App Flip'i destekleyecek şekilde nasıl değiştireceğinizi öğreneceksiniz.

Örneği deneyin

Bağlama Uygulama Kapak örnek uygulamayı Android'de entegrasyon bağlayan bir App Ayaklı uyumlu bir hesap gösterir. Google mobil uygulamalarından gelen bir Uygulama Çevirme amacına nasıl yanıt verileceğini doğrulamak için bu uygulamayı kullanabilirsiniz.

Örnek uygulaması ile entegre şekilde önceden Android için uygulama çevirin Testi Aracı size yapılandırmak Google ile bağlantı hesabı önce App Flip ile Android uygulamanın entegrasyonunu doğrulamak için kullanabileceğiniz. Bu uygulama, Uygulama Çevirme etkinleştirildiğinde Google mobil uygulamaları tarafından tetiklenen amacı simüle eder.

Nasıl çalışır

Bir Uygulama Çevirme entegrasyonu gerçekleştirmek için aşağıdaki adımlar gereklidir:

  1. Google uygulaması kontrolleri uygulamanızın kendi paket adı kullanarak cihazda yüklü olup olmadığını.
  2. Google uygulaması, yüklenen uygulamanın doğru uygulama olduğunu doğrulamak için bir paket imza kontrolü kullanır.
  3. Google uygulaması, uygulamanızda belirlenmiş bir etkinliği başlatmak için bir amaç oluşturur. Bu amaç, bağlantı için gereken ek verileri içerir. Ayrıca, bu amacı Android çerçevesi aracılığıyla çözerek uygulamanızın App Flip'i destekleyip desteklemediğini kontrol eder.
  4. Uygulamanız, isteğin Google uygulamasından geldiğini doğrular. Bunu yapmak için uygulamanız paket imzasını ve sağlanan müşteri kimliğini kontrol eder.
  5. Uygulamanız, OAuth 2.0 sunucunuzdan bir yetkilendirme kodu ister. Bu akışın sonunda, Google uygulamasına bir yetkilendirme kodu veya bir hata döndürür.
  6. Google uygulaması sonucu alır ve hesap bağlama işlemine devam eder. Bir yetkilendirme kodu sağlanırsa, belirteç değişimi, tarayıcı tabanlı OAuth bağlantı akışında olduğu gibi sunucudan sunucuya gerçekleşir.

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

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

  1. Bir ekleme <intent-filter> sizin için AndroidManifest.xml App Ayaklı Niyet alanına girilen değerle eşleşen bir eylem dize ile dosyaya.

    <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. Çağıran uygulamanı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. İstemci kimliğini amaç parametrelerinden çıkarın ve istemci kimliğinin beklenen değerle eşleştiğini doğrulayın.

    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ı yetkilendirmenin ardından, ortaya çıkan yetkilendirme kodunu Google'a geri gönderin.

    // Successful result
    val data = Intent().apply {
        putExtra("AUTHORIZATION_CODE", authCode)
    }
    setResult(Activity.RESULT_OK, data)
    finish()
    
  5. Bir hata oluştuysa, bunun yerine bir 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()
    

Lansman amacının içeriği

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

  • CLIENT_ID ( String ): Google client_id uygulamanızda altında kayıtlı.
  • SCOPE ( String[] ): İstenen kapsamları bir listesi.
  • REDIRECT_URI ( String ): yönlendirme URL.

Yanıt verilerinin içeriği

Google uygulamasına döndü veriler arayarak uygulamanızda ayarlanır setResult() . Bu veriler şunları içerir:

  • AUTHORIZATION_CODE ( String ): yetki kodu değer.
  • resultCode ( int ) iletişim kurar işleminin başarılı olup aşağıdaki değerlerden birini alır:
    • Activity.RESULT_OK : başarısını gösterir; bir yetkilendirme kodu döndürülür.
    • Activity.RESULT_CANCELLED : Kullanıcı işlemini iptal etti Sinyaller söyledi. Bu durumda, Google uygulaması, yetkilendirme URL'nizi kullanarak hesap bağlamayı dener.
    • -2 : bir hata meydana geldiğini gösterir. Farklı hata türleri aşağıda açıklanmıştır.
  • ERROR_TYPE ( int ) hatanın tipi, aşağıdaki değerlerden birini alır:
    • 1 : kurtarılabilir hata: Google uygulama yetkilendirme URL kullanarak bağlama hesabını dener.
    • 2 : Kurtarılamaz hata: Google uygulama düşükle sonlanması bağlayan hesap.
    • 3 : Geçersiz veya eksik istek parametreleri.
  • ERROR_CODE ( int ): Hatanın doğasını gösteren bir tamsayıdır. Her hata kodu araçları dediğimiz görmek için hata kodlarının masaya .
  • ERROR_DESCRIPTION ( String , isteğe bağlı): hatasını açıklayan İnsan tarafından okunabilir bir durum mesajı.

İçin bir değer AUTHORIZATION_CODE alınması bekleniyor resultCode == Activity.RESULT_OK . Diğer tüm durumlarda, değeri AUTHORIZATION_CODE boş olması gerekir. Eğer resultCode == -2 , daha sonra ERROR_TYPE değeri doldurulması öngörülmektedir.

Hata kodları tablosu

Aşağıdaki tablo, farklı hata kodlarını ve her birinin kurtarılabilir veya kurtarılamaz bir hata olup olmadığını gösterir:

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 aşağıdaki aracılığıyla hata sonucu dönmelidir setResult uygun yedek trigerred sağlamak için.