️ プラグイン バージョン 6.0.0 以降、最低限必要なcordova-ios バージョンは 4.5.0 です。以前の Cordova-iOS バージョンを使用する必要がありますか?プラグインのバージョン 5.3.2 以下を使用してください。
idToken
の交換serverAuthCode
交換このプラグインを使用すると、iOS および Android で Google サインインを使用してユーザーを認証および識別できます。すぐに使えるように、電子メール、表示名、名、姓、プロフィール写真の URL、およびユーザー ID が表示されます。 idToken と serverAuthCode を取得するように構成することもできます。
このプラグインは、Google サインイン 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 Developer Console で生成された有効な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 にログインすると、ユーザーは別の Safari ブラウザではなく、Google SDK を通じて SafariViewController に移動します。
Android を設定するには、ここで設定ファイルを生成します。 Google サインインを有効にし、Android アプリを追加して SHA1 フィンガープリントを追加します。 Google サインインが有効になると、Google は Web および Android の開発者コンソールで必要な認証情報を自動的に作成します。生成された google-services.json ファイルを Cordova プロジェクトに追加する必要はありません。同意画面の設定が必要な場合があります。
ここで説明されているようにkeytool
手順を必ず実行してください。実行しないと認証が失敗します (リリース キーストアとデバッグ キーストアの両方でこれを実行してください)。
重要:
keytool
に関する上記の手順では、リリースとデバッグの2 種類の証明書フィンガープリントが表示されます。構成ファイルを生成するときは、デバッグ証明書フィンガープリントを使用することをお勧めします。その後、Google Credentials Manager に移動して、手動で証明書フィンガープリントを作成する必要があります。リリース証明書のフィンガープリントを含むOAuth2 クライアントの資格情報。これは、開発リリースと実稼働リリースの両方でアプリケーションが動作するために必要です。 $ keytool -exportcert -keystore -list -v -alias
Android でのログインでは、ユーザーのデバイスにサインインしているアカウントが使用されます。
Google Play Services のバージョンを設定するには、PLAY_SERVICES_VERSION パラメータ (デフォルト値は 11.8.0) を使用できます。他の異なるバージョンの Google Play サービスを使用する別のプラグインとの競合を避けるのに役立ちます。これらは同じバージョンである必要があるためです。
Play ストアでアプリを公開すると、Google は別の証明書でアプリに再署名します。アプリが公開されたら、Google Play Console の「リリース管理」の「アプリ署名」セクションにある「アプリ署名証明書」の SHA-1 フィンガープリントをコピーします。このフィンガープリントを Google Credentials Manager のリリース 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 アプリケーションを構築している場合は、Google Developer's Console で、 myreversedclientid
、手順 3 で生成されたリリース認証情報のクライアント ID の逆の値に置き換える必要があります。これは次のようになります。 .googleusercontent.apps. uniqueId
" (引用符なし)。例: 「123-abc123.apps.googleusercontent.com」は「com.googleusercontent.apps.123-abc123」になります。
myreversedclientid
は、Google Developer's Console の 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 >
このプラグインは、iOS Google SignIn SDK ライブラリの依存関係を満たすために、CocoaPods 依存関係マネージャーを使用します。
したがって、iOS ビルド環境に Cocoapod がインストールされていることを確認してください。セットアップ手順はここでご覧いただけます。また、 pod repo update
を実行して、ローカルの Cocoapods リポジトリが最新であることを確認してください。
Xcode でプロジェクトをビルドする場合は、Cordova アプリ プロジェクトと Pods プロジェクトの両方が Xcode に読み込まれるように、 YourProject.xcworkspace
( YourProject.xcodeproj
ではありません) を開く必要があります。
Cocoapods-dependency をインストールすることで、Cordova iOS プロジェクト内のポッドの依存関係を一覧表示できます。
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 ( ... ) ;
}
2016 年 3 月 31 日: このメソッドを最初にチェックする必要はなくなりました。コードの直交性のために保持されます。
ログイン関数は、ユーザーに Google 認証プロセスを案内します。すべてのパラメータはオプションですが、いくつかの注意点があります。
Android でidToken
取得するには、 webClientId
を渡す必要があります(よくある間違いは、Android クライアント ID を指定することです)。 iOS では、デフォルトでidToken
がサインイン結果に含まれます。
serverAuthCode
を取得するには、 webClientId
を渡し、 offline
true に設定する必要があります。 offline が true であっても、webClientId が指定されていない場合、 serverAuthCode
要求されません。
要求されるデフォルトのスコープは、 profile
とemail
です (常に要求されます)。他のスコープを要求するには、スペース区切りのリストとしてscopes
パラメーターに追加します。これらは渡されたとおりにリクエストされます。リクエストできる有効なスコープについては、Google スコープのドキュメントを参照してください。たとえば、 '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 ) ;
}
) ;
成功コールバック (2 番目の引数) は、Google アカウントのサンプル データを含む、次の内容の JSON オブジェクトを取得します。
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 では、認証が成功しなかった場合、エラー コールバック (3 番目の引数) はエラー ステータス コードを受け取ります。これらのステータス コードの説明は、Google の Android 開発者 Web サイトの 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 は、ユーザー ID データがサーバーに直接送信されることを望んでいません。 idToken は、解凍するためにサーバーを通じて検証する必要があるため、データを安全かつ安全に送信するために推奨される方法です。
これにはいくつかの用途があります。クライアント側では、ユーザー ID を二重に確認する方法として使用したり、電子メール ホスト ドメインなどの詳細を取得するために使用したりできます。 idToken
本領を発揮するのはサーバー側です。これは、ユーザーにサーバー リソースへのアクセスを許可する前、またはserverAuthCode
アクセスおよびリフレッシュ トークンと交換する前に、ユーザーの身元を確認する簡単な方法です (次のセクションを参照)。
サーバー側で追加のアカウント アクセスではなく ID のみが必要な場合、これはその情報を提供する安全かつ簡単な方法です。
serverAuthCode
交換サーバー側アクセスの有効化に関する Google ドキュメント
上記の記事で述べたように、 serverAuthCode
アクセス トークンとリフレッシュ トークンと交換できるアイテムです。 idToken
とは異なり、これによりサーバー側がユーザーの Google アカウントに直接アクセスできるようになります。
最初のログイン要求でのみ、 serverAuthCode
が返されます。もう一度トークンを受け取りたい場合は、最初にログアウトを使用することで受け取ることができます。
この交換に関しては、いくつかのオプションがあります。Google REST API を使用してハイブリッド アプリ自体でそれらを取得することも、必要な方法であれば何でも使用してコードをバックエンド サーバーに送信してそこで交換することもできます (Google は例を提供しています) Java、Python、JS/HTTP の場合)。
前に述べたように、このプラグインはユーザーの認証と ID がすべてであるため、それを超えたユーザー アカウントの使用は、ユースケースごと、アプリケーションごとに実装する必要があります。
Q: Android で認証を機能させることができません。では、なぜ ANDROID API KEY がないのでしょうか?
A: Android では、 keytool
手順を実行する必要があります。詳細については、インストール手順を参照してください。
Q: keytool
手順を実行した後も、Android で認証を機能させることができません。 「10 エラー」が発生しました。
A: apk ファイルから SHA 1 証明書を取得する必要があります。 keytool -list -printcert -jarfile
を実行し、SHA 1 を Google コンソールの Android クライアント ID にコピーします。
Q: ああ、$@#*! Android のビルドが失敗する
A: Android SDK マネージャーにAndroid サポート リポジトリとAndroid サポート ライブラリがインストールされている必要があります。かなり最新のバージョンを使用していることを確認してください。
Q: Android エミュレータでこれが動作しないのはなぜですか?
A: Google API ターゲットおよび/または Google API CPUで実行されている仮想デバイスを使用していることを確認してください。
Q:エラー 10が表示されます。どうすればよいですか?
A: これは、使用したいキーストアを Cordova が使用していないことが原因である可能性があります (独自に生成したためなど)。これを行う方法については、https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app を確認してください。エラー 10 を解決するには、ビルドを実行する前にcordova clean
実行する必要があると報告されている人もいます。
Q:エラー 16が表示されます。どうすればよいですか?
A: Android アプリの署名 (またはフィンガープリント) は、署名時に Google コンソール (または 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 がビルドの署名に使用するキーは、Google Play Console で確認できます。
要件: Android アプリの基本情報を完了し、内部テストのために署名された APK をアップロードする必要があります。これをアップロードすると、次のメニューにアクセスできるようになります。
[リリース管理] > [アプリの署名] に移動します。そこに表示されます
「アップロード」のものは、上記のキー B と同じです (同じである必要があります)。そして「アプリ署名証明書」がGoogleが使用する鍵となります。これをコピーしてください。
繰り返しますが、それらをホワイトリストに登録するには 2 つのオプションがあります。 Google Cloud Platformのみを使用するプロジェクト、またはFirebase を使用するプロジェクト。
(Firebase も使用している場合は、この手順をスキップできます)