להתחיל את הקישור לחשבון 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.

הגדרה

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

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

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

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

  2. אם הסטטוס של החבילות האלה הוא לא Installed, בוחרים את שתיהן ולוחצים על Install Packages.

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

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

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

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