SNS連携(Unity)
Apple連携
Contents |
概要
このページでは、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」を確認します。
- Bundle IDの確認方法:
- 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以上