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

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

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

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

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

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

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

איך זה עובד

ביצוע הקישור מהפלטפורמה מתבצע באופן הבא:

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

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

דרישות

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

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

הגדרה

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

מגדירים את סביבת הפיתוח

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

  1. פותחים את Android SDK Manager.
  1. בקטע כלי SDK, מאתרים את שירותי Google Play.

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

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

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

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

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.0.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.

חומרי עזר

מסמכי עזר בנושא ממשק ה-API לאימות Android