App Flip برای اندروید

پیوند App Flip مبتنی بر OAuth (App Flip) برنامه Android شما را در جریان پیوند حساب Google وارد می کند. یک جریان پیوند دادن حساب سنتی به کاربر نیاز دارد که اعتبار خود را در مرورگر وارد کند. استفاده از App Flip ورود کاربر به برنامه Android شما را به تعویق می‌اندازد، که به شما امکان می‌دهد از مجوزهای موجود استفاده کنید. اگر کاربر وارد برنامه شما شده باشد، برای پیوند دادن حساب خود نیازی به وارد کردن مجدد اطلاعات کاربری خود ندارد. برای پیاده سازی App Flip در برنامه Android خود، حداقل مقدار تغییر کد مورد نیاز است.

در این سند، یاد می گیرید که چگونه برنامه اندروید خود را برای پشتیبانی از App Flip تغییر دهید.

نمونه را امتحان کنید

فلیپ برنامه ارتباط برنامه نمونه نشان می دهد که فلیپ سازگار حساب برنامه ارتباط یکپارچه سازی در آندروید. می‌توانید از این برنامه برای تأیید نحوه پاسخگویی به یک هدف App Flip ورودی از برنامه‌های تلفن همراه Google استفاده کنید.

برنامه نمونه پیش برای ادغام با برنامه تلنگر ابزار تست برای آندروید ، که شما می توانید به منظور بررسی ادغام برنامه های آندروید خود را با فلیپ نرم افزار قبل از پیکربندی حساب ارتباط با گوگل استفاده کنید. این برنامه قصد ایجاد شده توسط برنامه های تلفن همراه Google را هنگامی که App Flip فعال است، شبیه سازی می کند.

چگونه کار می کند

مراحل زیر برای انجام یکپارچه سازی App Flip مورد نیاز است:

  1. برنامه را چک میکند گوگل صورتی که برنامه شما بر روی دستگاه با استفاده از نام بسته آن نصب شده است.
  2. برنامه Google از بررسی امضای بسته برای تأیید صحت برنامه نصب شده استفاده می کند.
  3. برنامه Google قصدی برای شروع یک فعالیت تعیین شده در برنامه شما ایجاد می کند. این هدف شامل داده های اضافی مورد نیاز برای پیوند است. همچنین بررسی می کند که آیا برنامه شما از App Flip با حل این هدف از طریق چارچوب Android پشتیبانی می کند یا خیر.
  4. برنامه شما تأیید می کند که درخواست از برنامه Google می آید. برای انجام این کار، برنامه شما امضای بسته و شناسه مشتری ارائه شده را بررسی می کند.
  5. برنامه شما یک کد مجوز از سرور OAuth 2.0 شما درخواست می کند. در پایان این جریان، یک کد مجوز یا یک خطا را به برنامه Google برمی‌گرداند.
  6. برنامه Google نتیجه را بازیابی می کند و با پیوند دادن حساب ادامه می دهد. اگر کد مجوز ارائه شود، تبادل توکن سرور به سرور انجام می‌شود، به همان روشی که در جریان پیوند OAuth مبتنی بر مرورگر انجام می‌شود.

برنامه اندروید خود را برای پشتیبانی از App Flip تغییر دهید

برای پشتیبانی از App Flip، کد زیر را در برنامه اندروید خود تغییر دهید:

  1. اضافه کردن یک <intent-filter> به خود AndroidManifest.xml فایل را با یک رشته اقدام که منطبق بر ارزش شما در زمینه قصد فلیپ برنامه وارد شده است.

    <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. شناسه مشتری را از پارامترهای intent استخراج کنید و بررسی کنید که شناسه مشتری با مقدار مورد انتظار مطابقت دارد.

    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. پس از تأیید موفقیت آمیز، کد مجوز حاصل را به Google برگردانید.

    // 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 ): گوگل client_id تحت برنامه خود را ثبت شده است.
  • SCOPE ( String[] ): لیستی از حوزه درخواست شده است.
  • REDIRECT_URI ( String ): این URL تغییر مسیر.

محتوای داده های پاسخ

اطلاعات بازگردانده به برنامه Google در برنامه خود را از طریق تماس با مجموعه setResult() . این داده ها شامل موارد زیر است:

  • AUTHORIZATION_CODE ( String ): ارزش کد مجوز.
  • resultCode ( int ): ارتباط موفقیت یا شکست روند و یکی از مقادیر زیر را می گیرد:
    • Activity.RESULT_OK : نشان موفقیت؛ یک کد مجوز بازگشت داده می شود.
    • Activity.RESULT_CANCELLED : سیگنال که کاربر روند لغو کرده است. در این صورت، برنامه Google سعی می‌کند حساب را با استفاده از URL مجوز شما پیوند دهد.
    • -2 : نشان می دهد که یک خطا رخ داده است. انواع مختلف خطا در زیر توضیح داده شده است.
  • ERROR_TYPE ( int ): نوع خطا، که طول می کشد یکی از مقادیر زیر است:
    • 1 : خطای قابل بازیابی: برنامه Google از حساب ارتباط با استفاده از URL مجوز تلاش.
    • 2 : خطای غیر قابل: بینتیجه میگذارد برنامه گوگل ارتباط حساب.
    • 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 برای اطمینان از مناسب مجدد trigerred است.