העברה מכניסה ל-Google+

שלבים לצמצום ההשפעה של שינויים בהיקף על משתמשים

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

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

כשתעדכנו את לחצן הכניסה, אל תתייחסו אל G+ ואל תשתמשו בצבע האדום. להתאים להנחיות המיתוג המעודכנות שלנו.

רוב האפליקציות לכניסה ל-G+ ביקשו שילוב כלשהו של היקפי ההרשאות: plus.login, plus.me ו-plus.profile.emails.read. אתם צריכים למפות מחדש את ההיקפים באופן הבא:

היקף הרשאות ישן היקף הרשאות חדש
plus.login profile
plus.me openid
plus.profile.emails.read email

מיישמים רבים של כניסה באמצעות Google+ השתמשו בזרימת הקוד. כלומר, האפליקציות ל-Android, ל-iOS או ל-JavaScript מקבלות קוד OAuth מ-Google, והלקוח שולח את הקוד הזה חזרה לשרת, יחד עם הגנה מפני זיוף של בקשות באתרים שונים. בשלב הבא השרת מאמת את הקוד ומקבל אסימוני רענון וגישה כדי לשלוף פרטים של פרופיל משתמש מה-API של people.get.

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

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

העברת לחצן כניסה בפורמט HTML

אם כללתם בדף לחצן כניסה עם Google+ על ידי הקצאת הכיתה g-signin לרכיב, עליכם לבצע את השינויים הבאים:

  • כשמציינים את מזהה הלקוח בתג <meta>, במאפיין data- או באובייקט של פרמטרים, משנים את המחרוזת clientid ל-client_id, כמו בדוגמה הבאה:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • מקצים את המחלקה g-signin2 לרכיב של לחצן הכניסה במקום ל-g-signin. כמו כן, צריך לציין קריאות חוזרות (callbacks) נפרדות של הצלחה או כשל, במקום קריאה חוזרת יחידה, כמו בדוגמה הבאה:

    <!-- Google+ Sign-in (old) -->
    <div
      class="g-signin"
      data-callback="signinCallback">
    </div>
    

    <!-- Google Sign-in (new) -->
    <div
      class="g-signin2"
      data-onsuccess="onSignIn"
      data-onfailure="onSignInFailure">
    </div>
    
  • במקום להשתמש ב-handler אחד של קריאה חוזרת (callback), צריך להגדיר handlers של הצלחה וכישלון, כמו בדוגמה הבאה:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    
  • השינויים האלה מעדכנים את היקפי ברירת המחדל להיקפים profile email openid. כך תוכלו לקבל את פרטי הפרופיל הבסיסיים של המשתמש, כמו שם, כתובת אימייל וכתובת URL של תמונה:

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      let profile = googleUser.getBasicProfile();
      let fullName = profile.getName();
      let email = profile.getEmail();
      let imageUrl = profile.getImageUrl();
    }
    

העברה של לחצן כניסה שמעובד באופן דינמי

אם כללת בדף שלך לחצן כניסה עם Google+ בהתקשרות אל gapi.signin.render(), עליך לבצע את השינויים הבאים:

  • כשמציינים את מזהה הלקוח בתג <meta>, במאפיין data- או באובייקט של פרמטרים, משנים את המחרוזת clientid ל-client_id, כמו בדוגמה הבאה:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • אפשר לעבד את לחצן הכניסה באמצעות gapi.signin2.render() במקום gapi.signin.render(), כמו בדוגמה הבאה:

    // Google+ Sign-in (old)
    gapi.signin.render('myButton', additionalParams);
    

    // Google Sign-in (new)
    gapi.signin2.render('myButton', additionalParams);
    
  • במקום להשתמש ב-handler אחד של קריאה חוזרת (callback), צריך להגדיר handlers של הצלחה וכישלון, כמו בדוגמה הבאה:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    

השינויים האלה מעדכנים את היקפי ברירת המחדל להיקפים profile email openid. אפשר לקבל את פרטי הפרופיל הבסיסיים של המשתמש באמצעות method getBasicProfile().

העברה של תהליך כניסה ביוזמת JavaScript

אם התחלתם את תהליך הכניסה באמצעות קריאה ל-gapi.auth.signIn() כשמשתמשים לוחצים על לחצן הכניסה, עליכם לבצע את השינויים הבאים:

  • כשמציינים את מזהה הלקוח בתג <meta>, במאפיין data- או באובייקט של פרמטרים, משנים את המחרוזת clientid ל-client_id, כמו בדוגמה הבאה:

    <!-- Google+ Sign-in (old) -->
    <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
    

    <!-- Google Sign-in (new) -->
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    
  • משתמשים ב-gapi.auth2.attachClickHandler() כדי להתחיל את תהליך הכניסה לחשבון כשלוחצים על לחצן, כמו בדוגמה הבאה:

    // Google+ Sign-in (old)
    var signinButton = document.getElementById('signinButton');
    signinButton.addEventListener('click', function() {
      gapi.auth.signIn(additionalParams);
    });
    

    // Google Sign-in (new)
    auth2 = gapi.auth2.init();
    auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
    
  • במקום להשתמש ב-handler אחד של קריאה חוזרת (callback), צריך להגדיר handlers של הצלחה וכישלון, כמו בדוגמה הבאה:

    // Google+ Sign-in (old)
    function signinCallback(authResult) {
      if (authResult['status']['signed_in']) {
        // Handle successful sign-in
      } else {
        // Handle sign-in errors
        console.log('Sign-in error: ' + authResult['error']);
      }
    }
    

    // Google Sign-in (new)
    function onSignIn(googleUser) {
      // Handle successful sign-in
    }
    function onSignInFailure() {
      // Handle sign-in errors
    }
    

השינויים האלה מעדכנים את היקפי ברירת המחדל להיקפים profile email openid. אפשר לקבל את פרטי הפרופיל הבסיסיים של המשתמש באמצעות קריאה ל-method getBasicProfile().

העברת זרם היברידי בצד השרת

אם השתמשתם ב-JavaScript API כדי לקבל קוד הרשאה חד-פעמי להעברה לשרת, עליכם לבצע את השינויים הבאים:

  • משנים את ההיקף מ-https://www.googleapis.com/auth/plus.login ל-profile.

  • משתמשים ב-method gapi.auth2.grantOfflineAccess() עם פונקציית הקריאה החוזרת הקיימת, כמו בדוגמה הבאה:

    <!-- Google+ Sign-in (old) -->
    <div class="g-signin"
      data-scope="https://www.googleapis.com/auth/plus.login"
      data-clientid="YOUR_CLIENT_ID"
      data-redirecturi="postmessage"
      data-accesstype="offline"
      data-callback="signInCallback">
    </div>
    

    // Google Sign-in (new)
    auth2 = gapi.auth2.init({
      client_id: 'YOUR_CLIENT_ID',
      scope: 'profile'
    });
    
    ...
    
    auth2.grantOfflineAccess().then(signInCallback);
    

אם אתם צריכים גם גישה לכתובת האימייל של המשתמש, צריך להוסיף את email לפרמטר של ההיקף.