減少範圍變更對使用者影響的步驟
- 如果您的應用程式需要已驗證使用者的電子郵件地址,且您先前曾使用
profile.emails.read
來做這件事,請改用email
。 - 使用已核准的驗證申請,取得
profile.emails.read
的核准。請參閱「如何送交驗證」一節。 - 撤銷先前使用者存取權杖的範圍,或完全移除對應用程式的存取權。舉例來說,具有
profile.emails.read
存取權的符記應予以撤銷。建議您在使用者使用應用程式時撤銷授權,以便立即取得使用者的同意。 - 請使用者重新提供同意聲明,並使用新的範圍 (例如
email
),而非profile.emails.read
。 - 從 Google API OAuth 同意畫面設定中移除要逐步淘汰的範圍。
您必須進行的變更取決於您使用的 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 應用程式會從 Google 取得 OAuth 代碼,然後將該代碼連同跨網站要求偽造保護機制傳回伺服器。接著,伺服器會驗證程式碼,並取得重新整理和存取權杖,從 people.get
API 提取使用者個人資料資訊。
Google 目前建議您要求 ID 權杖,並將該 ID 權杖從用戶端傳送至伺服器。ID 權杖內建跨網站偽造保護機制,也可以在伺服器上進行靜態驗證,避免額外 API 呼叫,以便從 Google 伺服器取得使用者個人資料資訊。請按照操作說明驗證伺服器上的 ID 權杖。
如果您仍想使用程式碼流程取得個人資料,可以這麼做。伺服器取得存取權權杖後,您需要從「登入」Discovery 文件中指定的 userinfo
端點取得使用者個人資料。API 回應的格式與 Google+ 個人資料回應不同,因此您需要將剖析作業更新為新格式。
遷移 HTML 登入按鈕
如果您在頁面中加入 Google+ 登入按鈕,並將 g-signin
類別指派給元素,請進行下列變更:
在
<meta>
標記、data-
屬性或參數物件中指定用戶端 ID 時,請將字串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
。此外,請指定個別的成功和失敗回呼,而非單一回呼,如以下範例所示:<!-- 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>
請定義成功和失敗的處理常式,而非單一回呼處理常式,如以下範例所示:
// 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
。您可以取得使用者的姓名、電子郵件和相片圖片網址等基本個人資料,如下所示:// Google Sign-in (new) function onSignIn(googleUser) { let profile = googleUser.getBasicProfile(); let fullName = profile.getName(); let email = profile.getEmail(); let imageUrl = profile.getImageUrl(); }
遷移動態轉譯的登入按鈕
如果您透過呼叫 gapi.signin.render()
在頁面中加入 Google+ 登入按鈕,請進行下列變更:
在
<meta>
標記、data-
屬性或參數物件中指定用戶端 ID 時,請將字串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);
請定義成功和失敗的處理常式,而非單一回呼處理常式,如以下範例所示:
// 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
。您可以使用 getBasicProfile()
方法取得使用者的個人資料基本資訊。
遷移由 JavaScript 啟動的登入流程
如果您在使用者點選登入按鈕時,透過呼叫 gapi.auth.signIn()
來啟動登入流程,請進行下列變更:
在
<meta>
標記、data-
屬性或參數物件中指定用戶端 ID 時,請將字串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);
請定義成功和失敗的處理常式,而非單一回呼處理常式,如以下範例所示:
// 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
。您可以呼叫 getBasicProfile()
方法,取得使用者的基本設定檔資訊。
遷移混合式伺服器端流程
如果您使用 JavaScript API 取得要傳送至伺服器的一次性授權碼,請進行下列變更:
將範圍從
https://www.googleapis.com/auth/plus.login
變更為profile
。請將
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
新增至範圍參數。