サーバー構築不要!スマートフォンアプリ向けの新クラウド

トップ >ドキュメント >SNS連携(Unity):Apple連携

SNS連携(Unity)

Apple連携

概要

このページでは、Appleアカウントを利用してアプリの認証を行う機能について
必要な設定と実装を説明していきます。
※2020年7月現在、Androidについては非対応となりますのでご注意ください。

事前準備

mobile backendの会員情報にAppleアカウントを利用する場合は、以下の準備が必要です。

  • mobile backendを利用するための準備(SDK導入など)方法の詳細はこちらをご覧ください。
  • Apple管理画面で設定を行い、mobile backendに登録する手順について、詳細は Sign in with Appleと連携の設定 を参考にして、行ってください。

管理画面での設定を確認

  • アプリ設定のSNS連携を開き、Apple連携を許可していることを確認してください。
  • 「App ID」、「AppleチームID」、「AppleキーID」の情報が正しく登録されていることを確認してください。
  • 最後は「秘密鍵(p8ファイル)」が設定されていることを確認してください。

Unity側でApple ID認証を実装する

会員登録・認証を行う

Appleへのログイン処理が正常に完了した後、呼び出されるブロック内にて
mobile backendに会員を登録していきます。すでにmobile backendに登録されていた場合、認証のみ行われます。

Appleアカウントで正常にログインが完了したら、Apple側から認証情報(credential.UserId, credential.AuthorizationCode)が発行されます。
これらの認証情報を持って、mobile backendの会員登録・認証を行います。
Appleアカウントのログイン後の処理は LogInWithAuthDataAsync メソッドを利用します。
以下のサンプルコードでは、Appleへのログインに成功したうえで、mobile backendへの会員登録・認証を行っています。

  • これから、Unity側のコード実装詳細を説明します。最初は、グローバル変数をイニシャライズします。 Unity側ではSign In With AppleIDボタンを実施する前提としており、ボタンがクリックされた時に実施されるメソッドはSignInWithAppleIdPress()とします。
    private NCMBAppleAuthenManager appleAuthenManager;

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

  • iOSのネイティブアプリ側のSignInWithAppleID処理が完了したら、画面の更新時に結果の反映を行います。
    void Update()
    {
        if (this.appleAuthenManager != null)
        {
            this.appleAuthenManager.Update();
        }
    }

  • 以下のメソッドはSignInWithAppleIDへ呼び出すものです。サンプルコードではBundle IDがcom.apple.*** と例として記載していますが、実装するときにご自身のアプリのBundle IDに書き換える必要があります。
public void SignInWithAppleIdPress()
    {
        // iOSのネイティブアプリ側のSignInWithAppleID処理を実施
        this.appleAuthenManager.NCMBiOSNativeLoginWithAppleId(
            credential =>
            {
                // Handler the result and LogInWithAuthDataAsync in Mbaas.
                NCMBAppleParameters appleParameters = new NCMBAppleParameters(credential.UserId, credential.AuthorizationCode, "com.apple.***");
                NCMBUser user = new NCMBUser();
                user.AuthData = appleParameters.param;
                user.LogInWithAuthDataAsync((NCMBException e) => {
                    if (e != null)
                    {
                        // 認証失敗時の処理
                        Debug.Log ("エラー: " + e.ErrorMessage);
                    }
                    else
                    {
                        // 認証成功時の処理
                        Debug.Log("会員認証完了しました。");
                    }

                });
            },
            error =>
            {
                Debug.Log("エラー: " + error.Code);
            });
    }

  • 完成コードは以下のとおりです。ご参考いただければと思います。
using System.Collections;
using System.Collections.Generic;
using NCMB;
using UnityEngine;

public class SigninWithAppleIdSample : MonoBehaviour
{
    private NCMBAppleAuthenManager appleAuthenManager;

    // Start is called before the first frame update
    void Start()
    {
        this.appleAuthenManager = new NCMBAppleAuthenManager();
    }

    // Update is called once per frame
    void Update()
    {
        if (this.appleAuthenManager != null)
        {
            this.appleAuthenManager.Update();
        }
    }
    public void SignInWithAppleIdPress()
    {
        // ネイティブiOSコードを実施
        this.appleAuthenManager.NCMBiOSNativeLoginWithAppleId(
            credential =>
            {
                // Handler the result and LogInWithAuthDataAsync in Mbaas.
                NCMBAppleParameters appleParameters = new NCMBAppleParameters(credential.UserId, credential.AuthorizationCode, "com.apple.xxxx");
                NCMBUser user = new NCMBUser();
                user.AuthData = appleParameters.param;
                user.LogInWithAuthDataAsync((NCMBException e) => {
                    if (e != null)
                    {
                        // 認証失敗時の処理
                        Debug.Log ("エラー: " + e.ErrorMessage);
                    }
                    else
                    {
                        // 認証成功時の処理
                        Debug.Log("会員認証完了しました。");
                    }

                });
            },
            error =>
            {
                Debug.Log("エラー: " + error.Code);
            });
    }
}

Apple IDの会員登録・認証機能のみの利用であれば、これで完了となります。
ログインした会員の操作を行いたい方は、ログイン内のカレントユーザの説明を参照してください。

登録・認証を行い、エラーが発生する場合、考えられる原因は以下となります。

  • エラーコード:E403005、 エラーメッセージ:"apple must not be entered."
    • 管理画面のアプリ設定にあるApple IDの設定にて、「許可する」となっていない可能性があります。設定画面を確認してください。
  • エラーコード:E401003、 エラーメッセージ:"OAuth apple authentication error."
    • 管理画面に設定しているApp ID、AppleチームID、AppleキーID、秘密鍵、アプリ側のBundle IDに不正情報が入っている可能性があります。ドキュメントに記載している手順に沿って確認してください。
AppleIDとLink機能
  • Appleの認証情報と紐付ける場合
    • まず、LogInAsyncメソッドを使用してmobile backendへログインすることを行います。
    • その後、AppleIDのログイン認証をするようにネイティブアプリへ呼び出すNCMBiOSNativeLoginWithAppleIdを使用します。
    • 最後はLinkWithAuthDataAsyncへ呼び出すことです。
  • サンプルコードでは、すでにユーザ名、パスワード認証でログインしたユーザとLinkを行うサンプルコードです。
ユーザ名: userName
パスワード: password

  • サンプルコードではBundle IDがcom.apple.*** と例として記載していますが、実装するときにご自身のアプリのBundle IDに書き換える必要があります。
public void LinkwithAppleIdPress()
    {
        NCMBUser.LogInAsync("userName", "password", (NCMBException e) => {
            if (e != null)
            {
                Debug.Log("エラー: " + e.ErrorMessage);
            }
            else
            {
                Debug.Log("会員ログイン成功");
                this.appleAuthManager.NCMBiOSNativeLoginWithAppleId(
                credential =>
                {
                    NCMBAppleParameters appleParameters = new NCMBAppleParameters(credential.UserId, credential.AuthorizationCode, "com.apple.***");
                    // ログイン中ユーザcurrent userを取得します
                    NCMBUser user = NCMBUser.CurrentUser;
                    if (user != null)
                    {
                        // AppleIDと紐付けを実施します
                        user.LinkWithAuthDataAsync(appleParameters.param, (NCMBException ex) =>
                        {
                            if (ex != null)
                            {
                                Debug.Log ("エラー: " + ex.ErrorMessage);
                            }
                            else
                            {
                                Debug.Log("連携は成功しました。");
                            }
                        });
                    }
                    else
                    {
                        Debug.Log("ログイン中ユーザがいません。");
                    }

                },
                error =>
                {
                    Debug.Log("エラー: " + error.Code);
                });
                }
        });

    }

紐付けを行う時、エラーが発生する場合、考えられる原因の可能性は以下となります。

  • エラーコード:409001 エラーメッセージ:"authData is duplication."
    • 連携紐付けしようとするApple IDアカウントはすでに登録されていると思われます。
AppleIDとUnLink機能

以下のコードはmobile backendでAppleIDと紐付けしたログイン中currentUserをApple IDと紐付けを削除するUnLink機能の実装サンプルコードです。

public void UnlinkWithApplePress()
    {
        NCMBUser currentUser = NCMBUser.CurrentUser;
        if (currentUser != null)
        {
            currentUser.UnLinkWithAuthDataAsync("apple", (NCMBException e) => {
                if (e != null)
                {
                    Debug.Log ("エラー: " + e.ErrorMessage);
                }
                else
                {
                    Debug.Log("紐付けは削除されました!");
                }
            });
        }
        else
        {
            Debug.Log("ログイン中ユーザがいません。");
        }

    }

ログアウト処理の実装

ログアウトを行う場合は、mobile backendの会員としてのログアウト処理と、ログイン済みのApple ID認証情報を削除する必要があります。

// ログアウト
try {
    NCMBUser.LogOutAsync();
    // ログアウトが完了したあとの処理
    // Apple ID認証情報の削除を行います
} catch (NCMBException e) {
    // ログアウトが失敗したあとの処理
    Debug.Log ("エラー: " + e.ErrorMessage);
}

iOSプロジェクト側の設定

  • Unity側の設定が完了しましたら、iOSに向けてビルドを実施します。ビルドされたXcodeプロジェクトを以下のように設定と確認が必要です。
  • 管理画面で設定している「App ID」とXcodeで表示されているBundle IDは同一であることを確認してください。 Xcodeで表示されるBundle IDを確認する方法は以下のようにご参考にしてください。
    • Bundle IDの確認方法:
      • Xcodeでアプリのプロジェクトを開きます。
      • 左側のファイルディレクトリ一覧から、プロジェクト名をクリックし設定画面を開きます。
      • 作成されているTARGETを選択し、「General」の項目を開き、「Identity」で「Bundle Identifier」を確認します。
  • TARGETを選択し、「Signing & Capabilities」を開きます。
  • Signingのところでは「Automatic Manage Signing」にてチェックを入れるか、作成されたProvisioning Profileがあれば、 そちらがファイル選択されていることを確認してください。
  • 対応Capabilityに「Sign In with Apple」が追加されていることを確認してください。
  • 「AuthenticationServices.framework」を「UnityFramework」に追加するようにしてください。追加する方法は以下通りです。

  • Unity 2019.3未満の場合は、以下の画像のように「AuthenticationServices.framework」を「Unity-iPhone」に追加するようにしてください。


  • 「Build Phases」 タブで「AuthenticationServices.framework」を「Optional」にします。

  • 上記が完了しましたら、iOS動作確認は可能となります。

お探しの内容が見つからなかった場合はユーザーコミュニティ もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。

推奨画面サイズ1024×768px以上

ページの先頭へ