ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Unity で Sign in with Appleを実装する

f:id:mbaasdevrel:20200609154828p:plain

FacebookやTwitterなどのソーシャルログインを使っている場合、専用クライアントアプリでない時にはSign in with Appleも追加しなければなりません。これは6月末までを予定しており、それ以降審査提出時に対応が必須になります。

ニフクラ mobile backendでもSign in with Appleに対応しており、これは各種SDKについて含まれます。ゲーム開発でよく使われるUnityについても同様です。今回はUnity SDK利用時のSign in with Apple対応法を紹介します。

Unity SDKを導入する

まずはUnity SDKを導入します。SDKのダウンロードは Releases · NIFCLOUD-mbaas/ncmb_unity より可能です。執筆時点での最新バージョンは 4.2.0 となっています。基本的に最新版を利用してください。

ダウンロードして解凍後、ncmb.unitypackageを実行すると、インポート画面が表示されるので、そのままインポートを行います。

設定する

インポートした Assets/Prefabs のフォルダ内にある NCMBSettings.prefabNCMBManager.prefab をヒエラルキー(Hierarchy)にドラッグ&ドロップします。

ヒエラルキーにある NCMBSettings.prefabをクリックすると、インスペクタにアプリケーションキーとクライアントキーを設定する欄が表示されます。ここに、NCMBのアプリケーションキー、クライアントキーを設定します。

空のオブジェクトを追加する

ではここから最短でSign in with Appleを実装します。空のGame Objectを作成し、さらにAssetsの中で空のC#スクリプトを追加します。C#スクリプトを追加したら、Game Objectにドラッグ&ドロップしてアタッチします。

ここからコードになります。C#スクリプトをダブルクリックして編集します。まずNCMBを読み込みます。

using NCMB;

次にクラス変数として NCMBAppleAuthenManager を定義します。

private NCMBAppleAuthenManager appleAuthenManager;

開始時の Start メソッドでは NCMBAppleAuthenManager を初期化し、さらに後述する SignInWithAppleIdPress を実行します。

void Start()
{
    this.appleAuthenManager = new NCMBAppleAuthenManager();
    this.SignInWithAppleIdPress();
}

SignInWithAppleIdPress の内容は次の通りです。細かい処理はコメントを参考にしてください。注意点として NCMBAppleParameters ではiOSアプリのバンドルIDを指定します。これはあなたのアプリのバンドルIDと読み替えてください。

public void SignInWithAppleIdPress()
{
    // ネイティブiOSコードを実施
    this.appleAuthenManager.NCMBiOSNativeLoginWithAppleId(
        credential =>
        {
            // 取得した結果 credential を使ってNCMB用のパラメータを作成
            NCMBAppleParameters appleParameters = new NCMBAppleParameters(credential.UserId, credential.AuthorizationCode, "com.nifcloud.mbaas.signinwithapple");
            // ユーザオブジェクトを作成
            NCMBUser user = new NCMBUser();
            // 作成したパラメータを適用
            user.AuthData = appleParameters.param;
            // 認証処理を実行
            user.LogInWithAuthDataAsync((NCMBException e) => {
                // 結果がnullでない場合はエラー
                if (e != null)
                {
                    // 認証失敗時の処理
                    Debug.Log ("エラー: " + e.ErrorMessage);
                }
                // 結果のnullの場合は成功
                else
                {
                    // 認証成功時の処理
                    Debug.Log("会員認証完了しました。");
                }

            });
        },
        // Sign in with Appleの時点でエラー
        error =>
        {
            Debug.Log("エラー: " + error.Code);
        });
}

Apple Developer Programで設定する

Sign in with Appleを利用する際にはApple Developer Programでキーを設定する必要があります。手順についてはこちらを参照してください

mBaaSの管理画面でSign in with Appleの設定をする

続いてmBaaSの管理画面でもSign in with Appleの設定をします。これは、先ほどのiOS Member Centerで作成したキーなどの指定になります。詳細はこちらを参照してください

ビルドする

設定が終わったらアプリをビルドします。Xcode向けに書き出したら、Capabiritiesの設定でSign in with Appleを指定します。

さらにGeneral > Frameworks, Libraries, and Embedded Contentでフレームワークを設定します。以下の3つのフレームワークを追加します。

  • AuthenticationServices.framework
  • UserNotifications.framework
  • WebKit.framework

この時、Unity 2019.3以降かどうかで指定が変わりますので注意してください。

  • 2019.3より前
    ターゲットがアプリ本体
  • 2019.3以降
    ターゲットがUnityFramework

実行結果

ビルド後、アプリを実行すると、次のようにSign in with Appleのアクションシートが表示されます。

f:id:mbaasdevrel:20200609154828p:plain

問題なければログメッセージとして、会員認証完了しましたと出るはずです。

まとめ

Sign in with Appleの設定はUnityのコードだけでなく、iOS Member Centerでの設定やmBaaS管理画面での設定、Xcodeでの作業など多岐に渡ります。コード量は少ないですが、慣れないと手間取ることもあるでしょう。対応が迫られている方は早めに実装をお願いします。

何か詰まったところがあれば、コミュニティにて質問をお願いします。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。