LoginSignup
2
3

More than 1 year has passed since last update.

react-nativeで開発中のアプリにGoogleサインイン機能を実装する

Last updated at Posted at 2021-07-11

react-nativeで開発しているアプリに、Googleサインイン機能を実装したいと思い、色々試していてやっとの思いで実装できたので、共有できればと思います。

他にもいろいろな方法を試したものの、expo環境では動作しなかったり、うまくサインイン機能が動作しなかったりしました。

ようやく、下記の方法で実装できました。
他にも方法はあると思いますが、一参考にしていただければ幸いです。

実際の画像も用意しております。できるだけ噛み砕いて解説しています。

できたこと

開発中のアプリ上で「googleアカウントでサインインする」というボタンをクリックすると、googleサインイン画面が起動します。
起動された画面で自分のアカウントをクリックすると、アプリのユーザー専用画面にログインすることができる。

※今回は、Googleサインイン機能の実装のみについて記事にするため、サインイン完了後の画面遷移に関しては、ご自身でチャレンジしていただけると幸いです。

環境

typescript, react native, expo, firebase, MacBookAir

作業順序

  1. Googleサインイン用のファンクショナルコンポーネントを作成
  2. iosクライアントIDの取得
  3. androidクライアントIDの取得
  4. Googleサインイン機能を完成させる

1、Googleサインイン用のファンクショナルコンポーネントを作成

まずは、googleサインイン機能を使うためのファンクショナルコンポーネントを準備します。

下記の通り、コードを記載してください。

const handleGoogleSignIn = () => {
        const config = { 
            iosClientId: ``,
            androidClientId: ``,
            scopes: ['profile', 'email'],
        };

ここでは、Googleサインインに必要な設定をしていきます。
設定に必要な各クライアントIDは、2と3で作成していきます。

2、iosクライアントIDを取得

まずは、下記のGoogle開発者用サイトにアクセスしてください。

ご自身のGoogleアカウントでサインインしてください。
もしGoogleアカウントがなければ、作成してください。

Googleアカウントでサインイン後、新たにプロジェクトを作成してください。

下記の「プロジェクトを選択」ボタンをクリック
スクリーンショット 2021-07-11 14.39.17.png

クリックすると、下記のような画面になります。
「新しいプロジェクト」をクリックしてください。
スクリーンショット 2021-07-11 14.40.31.png

新しいプロジェクトをクリックすると、下記のような画面になります。

プロジェクト名を入力してください。

プロジェクト名は適当で大丈夫です。(アプリ名がすでに決まっていれば、アプリ名を記載してください。)
「作成」ボタンをクリックしてください。
スクリーンショット 2021-07-11 14.41.20.png

プロジェクトを選択ボタンをクリックしてください。
作成ボタンをクリック後、「プロジェクトを選択」ボタンをクリックすると、先程作成したプロジェクトが表示されます。

そのプロジェクトをクリックしてください。
スクリーンショット 2021-07-11 14.44.05.png

プロジェクトを開けたら、左サイドバーリスト内にある認証情報をクリックしてください。
クリックすると、下記のような画面になります。
スクリーンショット 2021-07-11 14.47.04.png

ここから、iosクライアントIDを発行していきます。

①まずは先程のキャプチャ上部にある「+認証情報」を作成をクリック。

②クリックすると下記のようなキャプチャが表示されるので、「OAuthクライアントID」をクリック

スクリーンショット 2021-07-11 14.48.28.png

※もし下記のような画面が表示されたら、③へ。表示されなければ④へ。

スクリーンショット 2021-07-11 14.49.43.png

③同意画面を設定→「外部」を選択→「作成」をクリックしてください、
その後、メールアドレス等の入力画面が出ますので、必須項目だけ入力してください。
その後、2ページほど編集画面が出てきますが、構わず「保存して次へ」をクリックしてください。
最後に、入力した情報が表示される画面「4概要」まで行ったら、左サイドバーリスト内の認証情報をクリックし、①から再度実行してください。

④OAuthクライアントIDをクリックすると、下記のようなキャプチャになります。
まずは、iosクライアントIDから作成しますので、アプリケーションの種類からiosをクリックしてください。

⑤iosをクリックすると、下記画面が表示されますので、以下2つの情報を入力してください。
・名前:アプリ名などを記載してください。
・バンドルID:host.exp.exponentを入力してください

スクリーンショット 2021-07-11 14.56.24.png

⑥入力後、作成ボランをクリックすると、クライアントIDが発行されますので、
それをコピーしといてください。
※後ででも認証情報画面からコピーできるので、そちらを使っていただいても構いません。

これで、iosクライアントIDの発行は完了です。

3、androidクライアントIDを取得

ここからandroidクライアントIDを作成していきます。

androidクライアントIDも、iosとほぼ同じように作成していきます。

まずは下記画面からandroidを選択してください。
スクリーンショット 2021-07-11 14.55.14.png

すると、下記のような画面が表示されます。キャプチャの下に記載されている流れに従ってください。

スクリーンショット 2021-07-11 15.03.22.png

①名前入力:アプリ名を記載してください。

②パッケージ名の入力:host.exp.exponentを入力してください。

③SHA-1...への入力:openssl rand -base64 32 | openssl sha1 -cをターミナルで実行。実行すると、A1:B2:C3...のようなコードが表示されるので、それを全コピし、キャプチャのSHA-1...の入力画面に貼り付けしてください。

④作成ボタンをクリックすると、iosと同じように、クライアントIDが発行されます。

これでandroidクライアントIDの発行が完了しました。

4、Googleサインイン機能を完成させる

いよいよ、発行したクライアントIDを使って、Googleサインイン機能の実装をします。

下記コードが、ファンクショナルコンポーネントの全容になります。

const handleGoogleSignIn = () => {
        const config = { 
            iosClientId: `<あなたのiosクライアントIDを入力>`,
            androidClientId: `<あなたのandroidクライアントIDを入力>`,
            scopes: ['profile', 'email'],
        };

        Google
            .logInAsync(config)
            .then((result) => {
                const { type, user } = result;

                if (type === 'success') {
                    const { email , name } = user;
                                         console.log('success!');
                } else {
                    console.log('error');
                }
            })
            .catch(e => {
                console.log(e);
            });
    }

handleGoogleSignInをボタンに追加する。

上記コードを記載できたら、作成したボタンコンポーネントのonPressにhandleGoogleSignInコンポーネントを追加してください。

※ボタンコンポーネントはreact-nativeのライブラリを使用する等、なんでも良いです。ご自身で作成してください。

これでexpoにて動作確認をすると、Googleサインイン画面が表示されるようになり、サインインするとコンソールログにsuccess!と表示されるはずです。

※iosアプリのexpo goを使用してください。
※expoのwebブラウザシュミレーターだと動作確認ができないようです。

以上、お疲れ様でした。

2
3
1

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
3