הפעלת קישור לחשבון Google ישירות מהפלטפורמה שלך.

אפשר ליצור קישור חשבונות ישירות מתוך האפליקציה לנייד, וכך לאפשר למשתמשים לקשר את החשבון שלהם בשירות שלכם לחשבון Google. הקישור שנוצר מעניק ל-Google גישה לנתונים שהמשתמש מסכים לשתף.

הגישה הזו משפרת את ביצועי הקישור של החשבונות על ידי יצירת מעורבות של משתמשים בהקשר המוכר של האפליקציה, במקום שיחה עם Assistant. אפשר לשלב אותו עם תהליך הקליטה של המשתמשים, עם ההגדרות ובפלטפורמות נוספות של האפליקציות, וכך ליצור הזדמנויות לגילוי ולהתעניינות של הפעולה של Google Assistant. לדוגמה, לאחר יצירת הקישור, אפשר להציע שהמערכת תעביר את המשתמש ישירות לפעולה שלכם.

היתרונות למשתמשים כוללים:

  • המשתמשים יכולים להתחיל ולהשלים את תהליך קישור החשבונות באפליקציה שלך, סביבה שהם כבר מכירים.
  • משתמשים לא דורשים פרטי כניסה, מכיוון שהם כבר אומתו במכשיר ובאפליקציה לנייד.

היתרונות למפתחים כוללים:

  • ניתן לקבוע היכן לקדם ולהפעיל קישור חשבונות באפליקציה לנייד, לדוגמה, בהגדרות המשתמש, במודעות מעברון או אחרי שמשתמש נכנס לאפליקציה לנייד. הוספת מספר נקודות כניסה להפעלת קישור חשבון עוזרת להפוך את הקישור של החשבון לגלוי יותר, וכתוצאה מכך יש יותר מעורבות ומספר החשבונות המקושרים.
  • עלייה בשיעור ההמרה, כי משתמשים יכולים להשלים את תהליך הקישור בפחות שלבים מתהליך ה-OAuth הרגיל לאינטרנט.
  • נדרש מאמץ נמוך של הנדסה כדי להטמיע קישור מהפלטפורמה שלך (Android), כי התהליך הזה ממנף את ההטמעה הקיימת של OAuth2.0 בהנחה שכבר ביצעת הטמעה כזו.
  • שיעורי נשירה מופחתים מפני שמשתמשים לא צריכים להזין מחדש את פרטי ההתחברות שלהם והם יכולים להשלים את התהליך בפחות שלבים. שיעורי הנשירה עשויים להיות גבוהים עד 80% בנתיבים שבהם המשתמשים נדרשים להיזכר ולהזין את פרטי הכניסה שלהם.

איך זה עובד

כדי לבצע את הקישור מהפלטפורמה, צריך לפעול לפי השלבים הבאים:

  1. המשתמש ילחץ על טריגר קישור באפליקציה שלכם או יפעיל אותו.
  2. המשתמש בוחר בחשבון Google שרוצים לקשר.
    1. המשתמש בוחר חשבון Google קיים במכשיר לקישור, או נכנס באמצעות חשבון חדש
  3. למשתמש מוצג מסכי הסכמה שמתארחים ב-Google, והוא צריך להסכים אם להמשיך או לבטל את תהליך הקישור כדי להפסיק את תהליך הקישור.
  4. למשתמש מוצג מסך ההסכמה שלכם והוא צריך להסכים אם להמשיך בתהליך הקישור או לבטל אותו כדי להפסיק את תהליך הקישור.
  5. הקישור נוצר בין חשבון המשתמש, בשירות שלכם ובחשבון Google שלו.

איור 1. קישור מזרימת הפלטפורמה

דרישות

כדי להטמיע קישור מהפלטפורמה, צריך:

  • אפליקציה ל-Android.
  • יש לכם שרת OAuth 2.0: אתם יכולים להשתמש בו, לנהל ולתחזק שרת OAuth 2.0 שתומך בזרימת קוד הרשאה של OAuth 2.0.

הגדרה

לפני שתתחילו את השלבים הבאים, עליכם להשלים את תהליך הרישום של קישור החשבון.

הגדרת סביבת הפיתוח

אפשר לקבל את הגרסה העדכנית ביותר של Google Play Services אצל מארח הפיתוח:

  1. פותחים את מנהל ה-SDK של Android.
  1. בקטע SDK Tools, מאתרים את Google Play Services.

  2. אם הסטטוס של החבילות האלה הוא 'לא מותקנת', בוחרים את שתיהן ולוחצים על התקנת חבילות.

הגדרת האפליקציה

  1. בקובץ build.gradle ברמת הפרויקט, כוללים את מאגר Maven של Google בקטע buildscript וגם בקטע allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. מוסיפים את יחסי התלות של ה-API של 'Link with Google' לקובץ gradle ברמת האפליקציה של המודול, שהוא בדרך כלל app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.2.0'
    }
    

הקישור מתהליך הפלטפורמה יוביל לשמירת אסימון גישה ש-Google תספק על ידי השירות שלכם. כדי להחזיר את האסימון למשתמש, קודם צריך לקבל את ההסכמה.

כדי לקבל הסכמה מהמשתמש ולהחזיר אסימון של קוד אימות דרך Google Play Services SDK, צריך לפעול לפי השלבים הבאים.

  1. פיתוח PendingIntent שיכול להפעיל את פעילות ההסכמה שלכם – ההסכמה מופעלת על ידי Play Services API. יהיה עליך לספק PendingIntent (לשם הבהרה, ייקרא consentPendingIntent) כשתתבצע קריאה ל-API

    Kotlin

    // Build a PendingIntent that can launch the consent activity
    val consentPendingIntent = buildConsentPendingIntent()
    

    Java

    // Build a PendingIntent that can launch your consent activity
    PendingIntent consentPendingIntent =
              buildConsentPendingIntent();
    
  2. יוצרים פעילות תואמת כדי לטפל בכוונת ההסכמה

    Kotlin

      class ConsentActivity : AppCompatActivity
    
      private fun onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature
          // of the following call)
          val token = getToken()
          val intent = Intent()
                      .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN,
                                token)
          setResult(Activity.RESULT_OK, intent)
          finish()
      }
    
      private fun onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED)
          finish()
      }
    

    Java

      public class ConsentActivity extends AppCompatActivity {
        ...
        private void onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature of
          // the following call
          String token = getToken();
          Intent intent = new Intent();
          intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token);
          setResult(Activity.RESULT_OK, intent);
          finish();
        }
    
        private void onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED, null);
          finish();
        }
     }
    
    

    אנחנו מניחים שהשיטות onConsentAccpeted() ו-onConsentRejectedOrCanceled() יופעלו אם המשתמש מאשר או דוחה או מבטל את ההסכמה שלכם, בהתאמה.

  3. יוצרים בקשה לשמירת האסימון, ובין פרמטרים אחרים של הגדרה מעבירים את PendingIntent שנוצר בשלב 1 שלמעלה.

    Kotlin

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult())
        { result ->
          if (result.resultCode == RESULT_OK) {
            // Successfully finished the flow and saved the token
          } else {
            // Flow failed, for example the user may have canceled the flow
          }
        }
    
      // Build token save request
      val request = SaveAccountLinkingTokenRequest.builder()
        .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
        .setConsentPendingIntent(consentPendingIntent)
        .setServiceId("service-id-of-and-defined-by-developer")
        //Set the scopes that the token is valid for on your platform
        .setScopes(scopes)
        .build()
    
       // Launch consent activity and retrieve token
       Identity.getCredentialSavingClient(this)
         .saveAccountLinkingToken(request)
         .addOnSuccessListener( saveAccountLinkingTokenResult -> {
            if (saveAccountLinkingTokenResult.hasResolution()) {
              val pendingIntent = saveAccountLinkingTokenResult
                                  .getPendingIntent()
              val intentSenderRequest = IntentSenderRequest
                                        .Builder(pendingIntent).build()
              activityResultLauncher.launch(intentSenderRequest)
            } else {
               // This should not happen, let’s log this
               Log.e(TAG, "Failed to save token");
            }
          })
          .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
    

    Java

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      ActivityResultLauncher<IntentSenderRequest>
          activityResultLauncher =
          registerForActivityResult(new ActivityResultContracts
                                        .StartIntentSenderForResult(),
                                    result -> {
          if (result.getResultCode() == RESULT_OK) {
              // Successfully finished the flow and saved the token
          } else {
              // Flow failed, for example the user may have canceled the flow
          }
      });
    
     // Build token save request
     SaveAccountLinkingTokenRequest request =
        SaveAccountLinkingTokenRequest.builder()
            .setTokenType(
                SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
            .setConsentPendingIntent(consentPendingIntent)
            .setServiceId("service-id-of-and-defined-by-developer")
            //Set the scopes that the token is valid for on your platform
            .setScopes(scopes)
            .build();
    
      // Launch consent activity and retrieve token
      Identity.getCredentialSavingClient(this)
          .saveAccountLinkingToken(request)
          .addOnSuccessListener(
              saveAccountLinkingTokenResult -> {
                if (saveAccountLinkingTokenResult.hasResolution()) {
                  // Launch the resolution intent
                  PendingIntent pendingIntent =
                      saveAccountLinkingTokenResult.getPendingIntent();
                  IntentSenderRequest intentSenderRequest =
                      new IntentSenderRequest.Builder(pendingIntent).build();
                  activityResultLauncher.launch(intentSenderRequest);
                } else {
                  // This should not happen, let’s log this
                  Log.e(TAG, "Failed to save token");
                }
              })
          .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e));
      ```
    

השלבים שלמעלה מבקשים מהמשתמשים הסכמה ומחזירים ל-Google קוד הרשאה.

שיטות מומלצות

  • האפליקציה צריכה לציין את סטטוס הקישור למשתמש באמצעות לחצן, מתג או רכיב חזותי דומה.

    איור 1. תמונה של סטטוס הקישור לדוגמה

  • צריך ליידע את המשתמש אחרי שקישור בוצע בהצלחה, למשל להציג הודעה קופצת, להפעיל שינוי מצב של החלפת מצב או להפנות את המשתמש לדף נפרד להצלחת הקישור.

  • מומלץ לבקש ממשתמשים באפליקציה לקשר חשבונות. רצוי על סמך אותות חזקים לכך שקישור יועיל למשתמשים כאלה.

  • לאחר הקישור, אתם צריכים לתת למשתמשים דוגמה למה לעשות עם החשבון המקושר. למשל, אם קישרתם שירות סטרימינג של מוזיקה, תוכלו לבקש מ-Google Assistant להשמיע מוזיקה.

  • המשתמשים יכולים לנהל את החשבונות המקושרים שלהם, כולל אפשרות לבטל את הקישור של החשבונות. להפנות אותו לדף הניהול של חשבונות Google המקושרים שלו, כלומר https://myaccount.google.com/accountlinking.

חומרי עזר

מסמכי עזר של Android auth API