LoginSignup
2
5

More than 5 years have passed since last update.

Cordova アプリで Google アカウント認証してみた

Last updated at Posted at 2018-12-24

はじめに

Google Apps Script で書いたプログラムを Cordova アプリから Google アカウント認証して使用しようと思いました。
まず、Cordova アプリで Google アカウント認証できるようにしたいと思います。

Cordova はウェブクライアントアプリのテクニックが使えるはずです。
Getting Started | API Client Library for JavaScript | Google Developers
調べると以下の記事が見つかりました。
PhoneGap Tips - Google API OAuth with PhoneGap's InAppBrowser
試してみましたが上手く行きません。さらに調べると
Google will no longer allow OAuth requests to Google in embedded browsers - Stack Overflow
要するに上記の記事はもう使えないわけです。さらに調べると
Setup Google Login in your Cordova/Phonegap App – Satpal Tanan – Medium
これでできそうです。

Cordova アプリを作成する

  • Cordova 8.1.2

Cordova アプリを作成する

Cordovaでつくるハイブリッドアプリ - Qiita

メモ

今回の Cordova アプリを作るのに幾つかハマったのでメモ。

まず、ビルドエラーになって Error processing "launch": 'cordova run android --device --verbose --no-update-notifier' failed with exit code 1 。以前から使用していた Cordova 開発環境がプラグインと合わないらしい。そこで Cordova 開発環境をアップデート。

Cordova 開発環境を最新にしたところ、Could not find an installed version of Gradle either in Android Studio... エラー。幾つか対応方法があるようだが、自分は Gradle 単体を Android Studio と別にインストールした。

パッケージ名と認証キーを取得する

後で使用するので以下の情報を取得しておきます。

  • アプリケーション ID

作成したプロジェクトフォルダにある config.xml を開いて

<widget id="●●.●●●●.●●●●" version="1.0.0" (以下略

  • 認証キー(Android アプリの場合)

証明書格納ファイルを作成して認証キーを取得します。
Androidアプリの証明書格納ファイル(keystore)の作成方法 - Cordova|ONE-RUN

keytool -list -v -keystore ●●●●●●

表示された情報のフィンガプリントの SHA1 を使います。

Google アカウント認証の準備する

  1. Google アカウントを作成する。既にあればそれを使用する
    (https://www.google.com/accounts)

  2. プロジェクトを作成する
    (https://console.developers.google.com/project)

  3. 使用したい API を選択して有効にする
    (https://console.developers.google.com/apis/library)

  4. 認証情報を作成
    (https://console.developers.google.com/apis/credentials)

OAuth 同意画面を設定する

まず、OAuth 同意画面 を設定します。

OAuth クライアント ID を作成する

Google 認証情報OAuth クライアント ID を作成します。

まず、タイプ(種類)ウェブアプリケーション

以下の項目を設定します。

  • 名前 ←任意です
  • JavaScript 生成元 →空でいいようです
  • リダイレクト URI →空でいいようです

以下の情報が作成されます。後で使用します。

  • クライアント ID
  • クライアントシークレット

Android アプリの場合、タイプ(種類) Android

以下の項目を設定します。

  • 名前 ←任意です
  • パッケージ名 ←上記で取得したアプリケーション ID
  • 署名証明書フィンガープリント ←上記で取得した認証キー

以下の情報が作成されます。

  • クライアント ID
  • クライアントシークレット

iOS アプリの場合、タイプ(種類) iOS

以下の項目を設定します。

  • 名前 ←任意です
  • バンドル ID ←上記で取得したアプリケーション ID

以下の情報が作成されます。

  • クライアント ID
  • クライアントシークレット

メモ

OAuth クライアント ID を作成するのに、自分は Android アプリを作りたいので、タイプ Android だけ作成しましたが、作成したアプリを実行すると 認証情報 が作成されていないとエラーになり、プラグインはどうやらタイプ ウェブアプリケーション も同時に使用するようで、Android アプリでもこれを作成しないといけませんでした。

Cordova アプリで Google アカウント認証する

  • cordova-plugin-google-api 5.1.4

メモ

この Cordova プラグインはリポジトリが幾つか見つかります。

Cordova プロジェクトにプラグインを追加する

作成してある Cordova プロジェクトにプラグインを追加します。

$ cordova plugin add cordova-plugin-google-api --save

config.xml を修正します。

config.xml
<plugin name="cordova-plugin-google-api" source="npm">
  <variable name="WEB_APPLICATION_CLIENT_ID" value="●●●●●●-●●●●●●●●●●●●●●●●.apps.googleusercontent.com" />
  <variable name="REVERSED_CLIENT_ID" value="com.googleusercontent.apps.●●●●●●-●●●●●●●●●●●●●●●●" />
</plugin>

WEB_APPLICATION_CLIENT_ID は、事前に取得した Google 認証のクライアント ID
REVERSED_CLIENT_ID は、そのクライアント IDの「.」で区切られた文字列の順序を入替えて作ります。

ログインボタンを用意する

アプリの画面に、ログインするためのボタンを用意しましょう。また、状態が分かるためのラベルも用意しましょう。

index.html
<button id="login">Login</button>
<p id="status">Not logged in.</p>
<img id="image">

ログインするコードを追加する

ログインするコードを追加します。このサンプルは jQuery を使用しています。

index.js
var clientId = '●●●●●●-●●●●●●●●●●●●●●●●.apps.googleusercontent.com';
var clientSecret = '●●●●●●●●●●';
var scope = 'profile';

$('#login').click(function(){
    // ①認証
    window.plugins.googleplus.login({    
            'webClientId': clientId,
            'offline': true,
            'scopes': scope
        },
        function(obj){    // 認証に成功した
            $('#status').html("Success: " + obj.displayName);
            $('#image').attr('src', obj.imageUrl);
            $('#image').show();
        },
        function(msg){    // 認証に失敗した
            $('#feedback').html("Error: " + msg)
        }
    );
});

上記のコードで img タグの src を書換えているが、Refused to load the image 'https://lh6.googleusercontent.com/.../photo.jpg' because it violates the following Content Security Policy directive: "img-src 'self' data: content:". エラーになる。index.html<meta http-equiv="Content-Security-Policy" content=img-src 'self'https://*.googleusercontent.com/ を追加してやる。

おわりに

Cordova アプリで Google アカウント認証できるようになりました。
続いて、Google API の呼出できるようにしたいと思います。
次回の記事 Cordova アプリで Google API 呼出してみた

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5