️ 從插件版本 6.0.0 開始,所需的最低 cordova-ios 版本是 4.5.0。需要使用較低的 cordova-ios 版本?使用外掛程式版本 5.3.2 或更低版本。
idToken
serverAuthCode
該外掛程式可讓您在 iOS 和 Android 上使用 Google Sign-In 對用戶進行身份驗證和識別。您將立即獲得電子郵件、顯示名稱、名字、姓氏、個人資料圖片網址和使用者 ID。您也可以將其設定為取得 idToken 和 serverAuthCode。
該插件僅包含對 Google Sign-In API 的存取。進一步的 API 存取應該根據用例、每個開發人員來實現。
安卓
iOS系統
要與 Google 通信,您需要進行一些繁瑣的設置,抱歉。
(強烈)建議您對 iOS 和 Android 使用相同的項目。
進入您的config.xml
並確保您的套件名稱(即應用程式 ID)是您想要的名稱。在以下步驟中設定 iOS 和 Android 時,請使用此套件名稱!如果不這樣做,您可能會收到 12501「用戶已取消」錯誤,儘管從未取消登入程序。
如果您使用 Ionic 等框架來建立項目,則此步驟尤其重要。當您建立專案時, config.xml
有一個佔位符包名,例如 com.ionic.*,因此您可以立即開始開發。
xml version = ' 1.0 ' encoding = ' utf-8 ' ?>
< widget id = " ** REPLACE THIS VALUE ** " ...>
...
widget >
瀏覽器平台需要在 Google 開發者控制台產生的有效WEB_APPLICATION_CLIENT_ID
。確保您已將 URL 位址(例如: http://localhost:3000
)新增至「授權 JavaScript 來源」部分。例如,請參閱此螢幕截圖
若要取得您的 iOS REVERSED_CLIENT_ID
,請在此處產生設定檔。此GoogleService-Info.plist
檔案包含您在安裝過程中所需的REVERSED_CLIENT_ID
。僅 iOS 需要此值。
REVERSED_CLIENT_ID
在開發人員控制台上也稱為「iOS URL 方案」。
iOS 上的登入將使用者透過 Google SDK 帶到 SafariViewController,而不是單獨的 Safari 瀏覽器。
若要設定 Android,請在此處產生設定檔。啟用 Google 登入並新增 Android 應用程式以新增 SHA1 指紋。啟用 Google 登入後,Google 將自動在開發者控制台中為 Web 和 Android 建立必要的憑證。無需將產生的 google-services.json 檔案新增至您的 cordova 專案。您可能需要設定同意畫面。
確保按照此處所述執行keytool
步驟,否則身份驗證將失敗(對發布和調試密鑰庫都執行此操作)。
重要的:
keytool
,顯示了 2 種類型的證書指紋, Release和Debug ,在生成配置文件時,最好使用Debug證書指紋,之後,你必須去 Google Credentials Manager,手動創建帶有您的發布證書指紋的OAuth2 用戶端憑證。這對於您的應用程式在開發和生產版本上的工作都是必需的。 $ keytool -exportcert -keystore -list -v -alias
Android 上的登入將使用在使用者裝置上登入的帳戶。
若要設定 Google Play Services 版本,您可以使用 PLAY_SERVICES_VERSION 參數(預設值為 11.8.0)。為了避免與使用任何其他不同版本的 Google Play 服務的其他外掛程式發生衝突,它很有用,因為它們必須是相同的版本。
當您在 Play 商店中發布應用程式時,Google 會使用不同的憑證重新簽署您的應用程式。發佈您的應用程式後,複製「套用簽署憑證」的 SHA-1 指紋,該憑證位於 Google Play 管理中心「發布管理」下的「套用簽章」部分。將此指紋貼到 Google Credentials Manager 中的 Release OAuth 用戶端 ID 中。
如果您想從登入程序中取得idToken
或serverAuthCode
,則需要傳遞項目 Web 應用程式的用戶端 ID。這可以在 Google 開發者控制台上專案的 API 憑證頁面上找到。
該插件相容:
它的工作原理如下(首先備份您的項目!):
使用 Cordova CLI 和 npm:
$ cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
使用 Cordova CLI 從 GitHub 取得最新版本:
$ cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
重要的:
請注意, myreversedclientid
是您在 iOS 設定檔中找到的反向 clientId 的佔位符。不要用引號將該值引起來。 (僅限 iOS 應用程式)
如果您正在建立混合應用程式(iOS 和 Android)或 Android 應用程序,則必須將myreversedclientid
替換為在 Google 開發者控制台上第 3 步生成的發布憑證中的客戶端ID 的反向值,這將是: “com uniqueId
" ,不含引號。範例:「123-abc123.apps.googleusercontent.com」變成「com.googleusercontent.apps.123-abc123」。
myreversedclientid
是專為 Google 開發者控制台中的 Web 應用程式產生的 Oauth 用戶端 ID 的佔位符。
GooglePlus.js 會自動引進。無需在 html 中更改或添加任何內容。
將其新增至您的 config.xml 中:
對於(穩定)NPM 版本:
< plugin name = " cordova-plugin-googleplus " source = " npm " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
plugin >
對於 Git 的最新版本(不建議):
< plugin spec = " https://github.com/EddyVerbruggen/cordova-plugin-googleplus.git " source = " git " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
< plugin >
該插件使用 CocoaPods 依賴管理器來滿足 iOS Google SignIn SDK 庫依賴關係。
因此,請確保您的 iOS 建置環境中安裝了 Cocoapods - 安裝說明可以在此處找到。也要透過執行pod repo update
確保您當地的 Cocoapods 儲存庫是最新的。
如果在 Xcode 中建置項目,您需要開啟YourProject.xcworkspace
(而不是YourProject.xcodeproj
),以便您的 Cordova 應用程式專案和 Pods 專案都會載入到 Xcode 中。
您可以透過安裝 cocoapods-dependency 來列出 Cordova iOS 專案中的 pod 依賴項:
sudo gem install cocoapods-dependencies
cd platforms/ios/
pod dependencies
檢查演示應用程式以幫助您快速上手,否則會傷害自己並按照以下步驟操作。
請注意,在deviceready
觸發之前不應呼叫這些方法。
例子:
document . addEventListener ( 'deviceready' , deviceReady , false ) ;
function deviceReady ( ) {
//I get called when everything's ready for the plugin to be called!
console . log ( 'Device is ready!' ) ;
window . plugins . googleplus . trySilentLogin ( ... ) ;
}
3/31/16:不再需要先檢查此方法。保留它是為了程式碼正交性。
登入功能引導使用者完成 Google Auth 流程。所有參數都是可選的,但有一些注意事項。
要在 Android 上取得idToken
,您必須傳入webClientId
(一個常見的錯誤是提供 Android 用戶端 ID)。在 iOS 上, idToken
預設包含在登入結果中。
若要取得serverAuthCode
,您必須傳入webClientId
並將offline
設為 true。如果離線為 true,但未提供 webClientId,則不會要求serverAuthCode
。
請求的預設範圍是profile
和email
(始終請求)。若要要求其他範圍,請將它們作為空格分隔的清單新增至scopes
參數。它們將按照傳入的內容進行請求。例如, 'scope': 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/tasks'
。
當然,為了使用任何其他範圍或 API,需要在專案開發人員控制台中啟動它們。
window . plugins . googleplus . login (
{
'scopes' : '... ' , // optional, space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true // optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
成功回呼(第二個參數)取得一個包含以下內容的 JSON 對象,其中包含我的 Google 帳戶的範例資料:
obj . email // '[email protected]'
obj . userId // user id
obj . displayName // 'Eddy Verbruggen'
obj . familyName // 'Verbruggen'
obj . givenName // 'Eddy'
obj . imageUrl // 'http://link-to-my-profilepic.google.com'
obj . idToken // idToken that can be exchanged to verify user identity.
obj . serverAuthCode // Auth code that can be exchanged for an access token and refresh token for offline access
obj . accessToken // OAuth2 access token
其他使用者資訊可按用例取得。將所需的範圍新增至scopes選項,然後將資訊傳回分別在Android和iOS上的handleSignInResult
和didSignInForUser
函數中建立的結果物件。
在 Android 上,如果驗證不成功,錯誤回呼(第三個參數)會收到錯誤狀態碼。這些狀態代碼的描述可以在 Google 的 Android 開發者網站 GoogleSignInStatusCodes 上找到。
在 iOS 上,錯誤回呼將包含 NSError localizedDescription。
您可以呼叫trySilentLogin
來檢查他們是否已經登入應用程序,如果是,則以靜默方式登入。
如果成功,您將獲得與login
功能相同的對象,但如果失敗,則不會向使用者顯示身份驗證對話方塊。
呼叫trySilentLogin
方式與login
相同,只是函數名稱不同。
window . plugins . googleplus . trySilentLogin (
{
'scopes' : '... ' , // optional - space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional - clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true , // Optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
強烈建議使用與登入相同的選項來實作 trySilentLogin,以避免任何潛在的複雜情況。
這將清除 OAuth2 令牌。
window . plugins . googleplus . logout (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
這將清除 OAuth2 令牌,忘記用於登入的帳戶,並中斷該帳戶與應用程式的連線。這將要求用戶在下次登入時再次允許應用程式存取。完全斷開可能需要一些時間。
window . plugins . googleplus . disconnect (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
idToken
使用後端伺服器進行身份驗證的 Google 文檔
如同上面文章所提到的, idToken
可以兌換使用者資訊來確認使用者身分。
注意:Google 不希望將使用者身分資料直接傳送到伺服器。 idToken 是他們安全可靠地發送資料的首選方法,因為必須透過他們的伺服器進行驗證才能解包。
這有多種用途。在客戶端,它可以是一種雙重確認使用者身分的方法,也可以用於取得電子郵件主機網域等詳細資訊。伺服器端是idToken
真正發揮作用的地方。在允許使用者存取該伺服器資源之前或在將serverAuthCode
交換為存取和刷新令牌之前,這是一種確認使用者身分的簡單方法(請參閱下一節)。
如果您的伺服器端僅需要身份,而不需要額外的帳戶存取權限,那麼這是提供該資訊的安全且簡單的方法。
serverAuthCode
用於啟用伺服器端存取的 Google 文件
如同上面的文章所提到的, serverAuthCode
是一個可以交換存取和刷新令牌的項目。與idToken
不同,這允許伺服器端直接存取使用者的 Google 帳戶。
僅在初次登入請求時會傳回serverAuthCode
。如果您希望再次接收令牌,可以先使用登出。
當涉及到這種交換時,您有幾個選擇:您可以使用Google REST API 來獲取混合應用程式本身中的那些,或者您可以使用任何必要的方法將程式碼發送到後端伺服器以在那裡進行交換(Google 提供了範例)適用於 Java、Python 和 JS/HTTP)。
如前所述,該插件完全與用戶身份驗證和身份有關,因此除此之外對用戶帳戶的任何使用都需要根據每個用例、每個應用程式來實現。
Q:我無法在 Android 上進行身份驗證。為什麼沒有 ANDROID API KEY?
A:在Android上您需要執行keytool
步驟,詳細資訊請參閱安裝說明。
Q:按照keytool
步驟操作後,我仍然無法在 Android 上進行身份驗證。我遇到了「10 錯誤」!
答:您需要從 apk 檔案中取得 SHA 1 憑證。運行: keytool -list -printcert -jarfile
並將 SHA 1 複製到 Google Console 上的 Android 用戶端 ID。
Q:天啊$@#*! Android 建置失敗
答:您需要在 Android SDK 管理器中安裝Android 支援儲存庫和Android 支援庫。確保您使用的是相當最新的版本。
Q:為什麼這在我的 Android 模擬器上不起作用?
答:確保您使用的是執行Google API 目標和/或 Google API CPU 的虛擬設備!
Q:我收到錯誤 10 ,該怎麼辦?
答:這可能是由於 cordova 沒有使用您想要使用的金鑰庫(例如,因為您產生了自己的金鑰庫)造成的。請檢查 https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app 以了解如何執行此操作。有些人報告說,您需要在運行建置之前運行cordova clean
以解決錯誤 10。
Q:我收到錯誤 16 ,該怎麼辦?
答:這始終是一個問題,因為您的 Android 應用程式的簽名(或指紋)在簽名時不會添加到 google console(或 firebase)OAuth 白名單中。請仔細檢查您是否已執行此操作所需的所有操作。請參閱下面的迷你指南。
首先,請確保您完全閱讀並理解 Android 文件中的應用程式簽名指南!
閱讀本文後/同時,請仔細檢查您是否正確執行了以下所有步驟 1-4:
為了簽署您的應用程式(在開發或發佈時),您需要使用 Android Studio 或透過終端機建立本機金鑰庫和金鑰。 Google 有一項名為「Google Play 應用程式簽名」的功能,他們會將金鑰保存在其伺服器上並為您簽署您的應用程序,但無論您是否使用此功能,您都需要本地金鑰庫和密鑰。
您的本機金鑰庫和金鑰將是您的官方應用程式簽署金鑰。
您需要在 Google OAuth 設定中將以下關鍵指紋(SHA1 格式)列入白名單:
debug.keystore
金鑰您的本機金鑰庫和金鑰將是您的“上傳金鑰”,官方“應用程式簽署金鑰”的另一個金鑰由 Google 建立和管理。
您需要在 Google Oauth 設定中將以下關鍵指紋(SHA1 格式)列入白名單:
debug.keystore
金鑰取得上述金鑰的指紋(SHA1 格式)以便能夠將它們列入白名單。
對於 android 預設debug.keystore
執行以下操作:
keytool -exportcert -keystore /Users/myusername/.android/debug.keystore -list -v
您將在終端機中看到調試金鑰的 SHA1 指紋。複製那個。
對於自己建立的具有金鑰的金鑰庫(無論是 2A 還是 2B),請執行以下操作:
keytool -exportcert -keystore /path/to/your/key/yourKeystoreFile.keystore -list -v
您將在終端機中看到調試金鑰的 SHA1 指紋。複製那個。
僅當啟用Google Play 應用程式簽名時(適用於 2B)。您可以在 Google Play Console 中找到 Google 用於簽署您的版本的金鑰。
要求:您需要完成Android應用程式的基本訊息,然後需要上傳簽署的APK進行內部測試。上傳後,您將能夠存取以下選單:
前往發布管理 > 應用程式簽名。在那裡你會看到
「上傳」與上面的鍵 B. 相同(並且應該相同)。 「應用程式簽署憑證」是 Google 將使用的金鑰。複製這個。
同樣,我們有兩個選項將它們列入白名單。僅使用Google Cloud Platform 的專案或使用Firebase的專案。
(如果您也使用 Firebase,則可以跳過此步驟)