Android के लिए ऐप्लिकेशन फ़्लिप

OAuth-आधारित ऐप्लिकेशन फ़्लिप लिंकिंग (ऐप्लिकेशन फ़्लिप), आपके Android ऐप्लिकेशन को Google खाता लिंक करने का फ़्लो. खाता लिंक करने का पुराना तरीका इस्तेमाल करने के लिए, उपयोगकर्ता को ब्राउज़र में अपने क्रेडेंशियल डालने होंगे. App Flip का इस्तेमाल करने से उपयोगकर्ता को परेशानी होती है अपने Android ऐप्लिकेशन में साइन-इन करें. इससे आपको मौजूदा प्राधिकरण. अगर उपयोगकर्ता ने आपके ऐप्लिकेशन में साइन इन किया है, तो उन्हें ये काम करने की ज़रूरत नहीं है उनके खाते को लिंक करने के लिए उनके क्रेडेंशियल फिर से डालें. कोड का कम से कम इस्तेमाल आपके Android ऐप्लिकेशन पर ऐप्लिकेशन फ़्लिप लागू करने के लिए, बदलाव करने ज़रूरी हैं.

इस दस्तावेज़ में, अपने Android ऐप्लिकेशन को अपडेट करने का तरीका बताया गया है. ऐप्लिकेशन फ़्लिप.

सैंपल आज़माएं

ऐप्लिकेशन फ़्लिप करने की सुविधा से लिंक करने वाला ऐप्लिकेशन का नमूना Android पर ऐप्लिकेशन फ़्लिप के साथ काम करने वाले खाते को लिंक करने के इंटिग्रेशन को दिखाता है. आपने लोगों तक पहुंचाया मुफ़्त में इस ऐप्लिकेशन का इस्तेमाल यह पुष्टि करने के लिए कर सकता है कि ऐप्लिकेशन फ़्लिप करने की वजह से आने वाले इंटेंट का जवाब कैसे दिया जाए Google मोबाइल ऐप्लिकेशन.

सैंपल ऐप्लिकेशन, ऐप्लिकेशन फ़्लिप टेस्ट टूल के साथ इंटिग्रेट करने के लिए पहले से कॉन्फ़िगर किया गया है Android, इसका इस्तेमाल करके, यह पुष्टि की जा सकती है कि Android ऐप्लिकेशन, Google के साथ खाता लिंक करने की प्रोसेस को कॉन्फ़िगर करने से पहले, फ़्लिप करें. यह ऐप्लिकेशन, Google News की ऐप्लिकेशन फ़्लिप चालू होने पर, Google मोबाइल ऐप्लिकेशन से ट्रिगर होने वाला इंटेंट.

यह कैसे काम करता है

ऐप्लिकेशन फ़्लिप इंटिग्रेशन करने के लिए, नीचे दिए गए तरीके अपनाने होंगे:

  1. Google ऐप्लिकेशन यह जांच करता है कि आपका ऐप्लिकेशन पैकेज का नाम.
  2. Google app, पैकेज के हस्ताक्षर की जांच करने की सुविधा का इस्तेमाल करके, यह पुष्टि करता है कि ऐप्लिकेशन सही ऐप्लिकेशन है.
  3. Google ऐप्लिकेशन, आपके ऐप्लिकेशन में कोई तय गतिविधि शुरू करने के लिए इंटेंट बनाता है. इस इंटेंट में लिंक करने के लिए ज़रूरी अतिरिक्त डेटा शामिल है. इसकी मदद से, यह देखने के लिए कि क्या आपका ऐप्लिकेशन Android फ़्रेमवर्क.
  4. आपका ऐप्लिकेशन इस बात की पुष्टि करता है कि अनुरोध Google ऐप्लिकेशन से ही किया गया है. ऐसा करने के लिए, आपका ऐप्लिकेशन, पैकेज सिग्नेचर और दिए गए क्लाइंट आईडी की जांच करता है.
  5. आपका ऐप्लिकेशन, आपके OAuth 2.0 सर्वर से ऑथराइज़ेशन कोड का अनुरोध करता है. इस फ़्लो के अंत में है, तो यह Google ऐप्लिकेशन.
  6. Google ऐप्लिकेशन, नतीजे को वापस ला देता है और खाता लिंक करने की प्रोसेस जारी रखता है. अगर आपने ऑथराइज़ेशन कोड दिया जाता है, तो टोकन एक्सचेंज होता है एक ही सर्वर से दूसरे सर्वर में ट्रांसफ़र किया जा सकता है. ठीक उसी तरह, जैसे यह ब्राउज़र पर आधारित OAuth लिंकिंग में किया जाता है फ़्लो.

App Flip की सुविधा का इस्तेमाल करने के लिए, अपने Android ऐप्लिकेशन में बदलाव करना

ऐप्लिकेशन फ़्लिप की सुविधा के लिए, अपने Android ऐप्लिकेशन में ये कोड बदलाव करें:

  1. कार्रवाई करके, अपनी AndroidManifest.xml फ़ाइल में <intent-filter> जोड़ें ऐसी स्ट्रिंग जो ऐप्लिकेशन फ़्लिप इंटेंट फ़ील्ड में डाली गई वैल्यू से मेल खाती है.

    <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. कॉल करने वाले ऐप्लिकेशन के हस्ताक्षर की पुष्टि करें.

    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. इंटेंट पैरामीटर से Client-ID निकालें और पुष्टि करें कि क्लाइंट आईडी अनुमानित वैल्यू से मैच करती है.

    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. अनुमति मिलने के बाद, लागू होने वाला ऑथराइज़ेशन कोड वापस दें अपने Pixel डिवाइस के अनुभव को बेहतर बनाने में मदद करें.

    // Successful result
    val data = Intent().apply {
        putExtra("AUTHORIZATION_CODE", authCode)
    }
    setResult(Activity.RESULT_OK, data)
    finish()
    
  5. अगर कोई गड़बड़ी हुई है, तो गड़बड़ी का कोई नतीजा दिखाएं.

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

लॉन्च के इंटेंट का कॉन्टेंट

Android इंटेंट के आधार पर आपका ऐप्लिकेशन लॉन्च किया जाता है. इस इंटेंट में ये फ़ील्ड शामिल हैं:

  • CLIENT_ID (String): Google client_id आपके ऐप्लिकेशन के तहत रजिस्टर है.
  • SCOPE (String[]): अनुरोध किए गए दायरों की सूची.
  • REDIRECT_URI (String): दूसरा वेबलिंक.

जवाब के डेटा का कॉन्टेंट

Google app को वापस मिला डेटा, आपके ऐप्लिकेशन में setResult() पर कॉल करके सेट कर दिया जाता है. इस डेटा में ये चीज़ें शामिल हैं:

  • AUTHORIZATION_CODE (String): ऑथराइज़ेशन कोड की वैल्यू.
  • resultCode (int): यह जानकारी देने से, प्रोसेस की सफलता या असफलता के बारे में पता चलता है और इनमें से एक वैल्यू लेता है:
    • Activity.RESULT_OK: सफलता के बारे में बताता है; एक ऑथराइज़ेशन कोड दिखाया जाता है.
    • Activity.RESULT_CANCELLED: ऐसे सिग्नल जो उपयोगकर्ता ने रद्द कर दिए हैं प्रोसेस. इस स्थिति में, Google ऐप्लिकेशन इसका उपयोग करके खाता लिंक करने की कोशिश करेगा अनुमति देने वाला यूआरएल
    • -2: यह बताता है कि कोई गड़बड़ी हुई है. अलग-अलग तरह की गड़बड़ियां नीचे दी गई हैं.
  • ERROR_TYPE (int): गड़बड़ी का टाइप, जिसमें नीचे दी गई कोई एक चीज़ होती है मान:
    • 1: ठीक की जा सकने वाली गड़बड़ी: Google ऐप्लिकेशन इसका उपयोग करके खाता लिंक करने की कोशिश करेगा अनुमति देने वाला यूआरएल
    • 2: ठीक न की जा सकने वाली गड़बड़ी: Google ऐप्लिकेशन, खाता लिंक करने की प्रोसेस रद्द कर रहा है.
    • 3: अनुरोध के पैरामीटर अमान्य हैं या मौजूद नहीं हैं.
  • ERROR_CODE (int): गड़बड़ी किस तरह की है, यह दिखाने वाला पूर्णांक. देखने के लिए हर गड़बड़ी कोड का क्या मतलब है. इसके बारे में ज़्यादा जानने के लिए, गड़बड़ी कोड की टेबल में दी गई जानकारी को दिखाता है.
  • ERROR_DESCRIPTION (String, ज़रूरी नहीं): स्थिति का मैसेज, जिसे कोई भी व्यक्ति पढ़ सकता है पर क्लिक करें.

AUTHORIZATION_CODE के लिए मान तब अपेक्षित होता है जब resultCode == Activity.RESULT_OK. अन्य सभी मामलों में, AUTHORIZATION_CODE खाली होना चाहिए. अगर resultCode == -2, तो ERROR_TYPE वैल्यू में जानकारी अपने-आप भर सकती है.

गड़बड़ी कोड की टेबल

नीचे दी गई टेबल में अलग-अलग गड़बड़ी के कोड दिखाए गए हैं. साथ ही, यह भी बताया गया है कि हर कोड को ठीक किया जा सकता है या वापस नहीं लाया जा सकता:

गड़बड़ी का कोड मतलब रिकवर किया जा सकता है पुनर्प्राप्ति संभव नहीं
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

सभी गड़बड़ी कोड के लिए, आपको setResult के ज़रिए गड़बड़ी का नतीजा पक्का करें कि सही फ़ॉलबैक लागू किया गया हो.