UnityでAndroid用にSign in with Appleを実装し、Firebase Authと連携していく手順を解説します。
iOSでSign in with Appleを実装する方法はコチラ
Googleログインの実装はコチラの記事を参照してみてください。
前提として、「Firebaseにアプリのプロジェクトを作成」し、かつ、「iOSの開発ライセンスも取得済み」とします。
FirebaseでSign In with Appleを有効化
Firebaseで該当プロジェクトを開き、AuthenticationメニューのSign-in methodタブから「新しいプロバイダを追加」ボタンを押し、Sign In with Appleを追加します。
Sign In with Appleを有効化する画面の下にある認証コールバックURLは後ほど使うのでコピーしておきます。
iOSアプリを登録
AndroidでしかSign In with Appleを使わなくても、iOSアプリのID登録が必要になります。
Apple DeveloperサイトのCertificates, Identifiers & Profiles (証明書、ID、プロファイル)ページのIdentifiersを選び、上の+ボタンを押します。
次の画面でApp IDsを選択し、Continue。
次の画面でAppを選択し、Continue
次の画面でDescription(表示名)と、Bundle IDを適当に入れたあと、下に並んでいる機能一覧からSign In with Appleにチェックを入れて、Continueを押して、最後にRegisterを押し、iOSアプリをまず登録します。
Service IDの登録
次にAndroid環境でSign In with Appleを利用するためのService ID登録をします。
Apple DeveloperサイトのCertificates, Identifiers & Profiles (証明書、ID、プロファイル)ページのIdentifiersを選び、上の+ボタンを押します。
Services IDs、を選んで、Continue。
Description(表示名)と、任意のIDを入れて、Continue。
Registerを押して登録します。
登録すると、ID一覧が表示されるので、今登録したIDを選んで、Sign in with Appleを選び、Configure。
Primary App IDに、最初に登録したiOSアプリを、Domains and Subdomainsには、FirebaseでSign In with Appleを有効化した際にコピーした認証コールバックURLのドメインとサブドメインを(例: hogeapp.firebaseapp.comの場合は、「firebaseapp.com,hogeapp.firebaseapp.com」と記入)、Return URLsには、認証コールバックURLを入れて、Next
Done。
最後にSaveを押して、登録完了。
登録したService IDは、後ほど使うので、コピーしておきます。
秘密鍵の作成
次に、Sign In with AppleをOAuth2で行うための秘密鍵を作成します。
Apple DeveloperサイトのCertificates, Identifiers & Profiles (証明書、ID、プロファイル)ページのKeysを選び、上の+ボタンを押します。
Key Nameに適当な名前を入れ、Sign in with Appleにチェックを入れたら、Configure。
Primary App IDの欄で、最初に登録したiOSアプリを選択して、Save。
Continueが押せるようになるので、Continue。
Register。
完了画面のKey IDをコピー。Downloadボタンを押して、秘密鍵ファイルをダウンロードします。
各項目をFirebaseに登録
最後に、Firebaseの該当プロジェクトのSign In with Apple欄を選び、Apple Developerページで登録した各項目を入力します。
AppleチームIDは、Apple Developerページの右上に表示されています。
Sign In with Appleの実装
FirebaseAuthパッケージの導入
以下のリンクから最新版のFirebase Unity SDKをダウンロードします。
今回はバージョン11.2.0を導入しています。
既に他のFirebaseパッケージを導入済の場合は同じバージョンのFirebaseAuthパッケージを入れるか、最新のパッケージを全て入れ直してください。
そうしないとエラーで動きません。
ダウンロードしたら解凍して、FirebaseAuth.unitypackage をimportします。
C#の実装
Firebase Authを使って、OAuth2でSign In with Appleを実行し、FirebaseAuthと連携させます。
using UnityEngine;
using Firebase.Auth;
using Firebase.Extensions;
public class TestController : MonoBehaviour
{
private FirebaseAuth auth;
Firebase.DependencyStatus dependencyStatus = Firebase.DependencyStatus.UnavailableOther;
private void Start()
{
// FirebaseAuthの初期化
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
{
dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
auth = FirebaseAuth.DefaultInstance;
}
else
{
Debug.Log($"error: {dependencyStatus}");
}
});
}
public void SignInWithApple()
{
// Apple認証開始
Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData();
providerData.ProviderId = "apple.com";
Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider();
provider.SetProviderData(providerData);
auth.SignInWithProviderAsync(provider).ContinueWithOnMainThread(task =>
{
if (task.IsCanceled)
{
Debug.Log($"canceled");
return;
}
if (task.IsFaulted)
{
Debug.Log($"error: {task.Exception}");
return;
}
// 認証成功
Firebase.Auth.AuthResult authResult = task.Result;
// FirebaseAuth連携
auth.SignInWithCredentialAsync(authResult.Credential).ContinueWith(authTask =>
{
if (authTask.IsCanceled)
{
Debug.Log($"LinkWithCredentialAsync Cancelled");
}
else if (authTask.IsFaulted)
{
Debug.Log($"LinkWithCredentialAsync Faulted");
}
else
{
Debug.Log($"LinkWithCredentialAsync Complete!");
}
});
});
}
}
すべての手順を正しく実行できていれば、次のようにSign In with Appleの画面が表示され、ログインに成功すると、FirebaseにAppleIDと連携したアカウントが作成されます。