Unity を検索

取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

2019 年 6 月に開催された Worldwide Developers Conference(WWDC)にて、Apple は新製品 Sign in with Apple を発表しました。2019 年 9 月 19 日に行われた iOS 13 のリリースに合わせて、Apple は App Store Review ガイドラインを更新し、サードパーティまたはソーシャルログインサービスを使用するすべての新規アプリケーションに、同等のオプションとして Sign in with Apple の提供が求められるようになりました。既存のアプリケーションについては、2020 年 4 月までに対応することが求められます。この変更の詳細については、Apple のデベロッパーサイトを参照してください。

Unity では、Unity の開発者の多くがサードパーティのサインインサービスを採用していることを理解しています。これらの新しいガイドラインに簡単に準拠できるように、Unity では新しいアセットストアパッケージを作成しました。このパッケージを新規または既存のプロジェクトに追加することで、新しい Sign in with Apple の機能を簡単に利用できます。

以下に次の内容がまとめられています。

  1. 新しいアセットストアプラグインの使用方法に関するステップバイステップガイド
  2. 重要なガイドラインへのリンク
  3. より高度なユースケースのための、サーバー側検証の実行方法に関する概要

プレイヤーの識別は多くのモバイルゲームにとって重要な部分を占め、プレイヤーのプライバシー確保の点で特に重要性が増しています。自社システムを保有している場合でも、サードパーティのログインシステムを利用している場合でも、Unity ではゲーム開発者に柔軟性を提供する一方で、プレイヤー体験がよりシームレスになるよう支援したいと考えています。また、そのことを念頭に置いて、Unity ではこの機会を利用して、今年の後半に公開予定のユーザー認証ソリューションの計画を共有したいと考えています。

スタートガイド

Sign in with Apple の利用を開始できるように、Unity では新しいアセットストアパッケージを作成しました。このパッケージの目的は、新しく追加された iOS 13 API で求められる Sign in with Apple を利用できるようにすることです。

他には Xcode 11 が必要です。Xcode 11 は、macOS 10.14(Mojave)または 10.15(Catalina)のほか、iOS 13.0 がインストールされているデバイスで動作します。Xcode と iOS 13 は、こちらからダウンロードできます。また、Unity では、Sign in with Apple クイックスタートガイドに目を通しておくことを推奨しています。このガイドでは、Apple の「Human Interface Guideline(英語)」と「App Store Review ガイドライン」について説明しています。また、アプリケーションで Sign in with Apple 機能を Apple のデベロッパーポータルで有効にする必要があります。

Unity アセットストアから新しいパッケージをダウンロードできます。

パッケージは、次のように使用します。

1.パッケージを既存の Unity プロジェクトにインポートします。

2.Apple からのログインに関わるデータを受け取るコールバックを持つスクリプトを作成します。API がどのように使用されるかの例については、サンプルスクリプト「SignInWithApple.cs」を参照してください。

3.Unity プロジェクトを再ビルドし、Unity によって作成された Xcode プロジェクトを開きます。

4.Xcode 内で、エンタイトルメントとフレームワークの依存関係を設定する必要があります。

a.「Project Settings」に「Sign in with Apple」機能を追加する必要があります。

b.プロジェクトに AuthenticationServices フレームワークを追加する必要があります。前のバージョンの iOS をターゲットにする予定がある場合は、このフレームワークをオプションとマークする必要があります。

ここまでの手順については、以下のビデオをご覧ください。

注:Unity 2019.2 またはそれより前のバージョンで作成された Xcode プロジェクトには UnityFramework ターゲットがありません。代わりに、AuthenticationServices フレームワークを Unity-iPhone ターゲットに追加する必要があります。

5.プロジェクトの設定が完了したら、次はコールバックで利用できるようにしたあらゆるデータを抽出し、プロジェクトの既存のコードベースで使用できるようにします。

サーバー側検証

サーバー側での ID 検証も求められるゲームやアプリケーションについては、検証のためにサーバーに identityToken を渡すことができます。

Apple の identityToken は、クライアント側では生成できない JSON Web Token(JWT)トークンです。JWT トークンが Apple により発行され、ご自身のアプリでの使用が意図されていることを検証するには、次のことを確認する必要があります。

  • 標準の JWT 検証を適用する:
  • その JWT トークンの対象がご自身のアプリの対象ユーザーであることを確認する。
    • Sign in with Apple から返されるトークンでは、対象ユーザーとしてご自身の iOS アプリ ID が使用されます。サーバー側でトークンを検証し、ご自身のアプリでの使用が意図されたものであることを確認する必要があります。

Apple JWT ペイロードクレームは、次のとおりです。

クレーム列名種類説明
iss発行元stringhttps://appleid.apple.com値は常に https://appleid.apple.com
aud対象ユーザーstringcom.unity.testAppトークンの対象ユーザー。
exp有効期限number1568671600エポック(1970 年 1 月 1 日 0 時 0 分 0 秒(協定世界時)からの経過秒数)で表したトークンの有効期限。
iat発行時間number1568671000エポックで表したトークンの発行時間。
sub主体string001999.80b18c74c3264cad895d0eae181d8f50.1909認証されたユーザーのユーザー ID。
c_hashコードハッシュstringagyAh42GdE-O72Y4HUHypg承認コードのハッシュ。承認コードを検証する必要があるときにのみ使用されます。
emailメールstringxxx@privaterelay.appleid.comユーザーの E メールアドレス。
email_verified検証済みのメールstringtrueメールが検証済みであるかどうか。これは JSON タイプの文字列です。
auth_time認証時間number1568671000エポックで表した認証が発生した時間。

JWT ライブラリは、ほとんどのプログラミング言語で用意されています。これらのライブラリはトークンを解析して検証するのに役立ちます。

JavaScript を使用する場合、トークンを検証する方法についての例は次のとおりです。stdin からトークンを読み取り、トークンの検証を試行します。"your.app.id" は Apple から提供される実際のアプリ ID に置き換えてください。

const jwt = require('jsonwebtoken')
const jwksClient = require('jwks-rsa');
fs = require('fs');

var token = fs.readFileSync('/dev/stdin').toString().trim();
console.log(token);

var client = jwksClient({
  jwksUri: 'https://appleid.apple.com/auth/keys'
});

function getApplePublicKey(header, callback) {
  client.getSigningKey(header.kid, function (err, key) {
    var signingKey = key.publicKey || key.rsaPublicKey;
    callback(null, signingKey);
  });
}

jwt.verify(token, getApplePublicKey, null, function (err, decoded) {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  if (decoded.iss !== "https://appleid.apple.com") {
    console.error("unexpected issuer (iss claim): ", decoded.iss);
    process.exit(1);
  }
  if (decoded.aud !== "your.app.id") {
    console.error("unexpected audience (aud claim): ", decoded.aud);
    process.exit(1);
  }
  console.log("Validated Apple token: ", decoded);
});

今後の見通し

今後のユーザー認証ソリューションは、Unity でホストされる認証 API と承認 API、バックエンドの実装と独立してログインとキー認証ワークフローを実装する Unity パッケージ、Sign in with Apple で求められるようなユーザー体験固有の要件に対処するドロップインプレハブで構成されます。

Unity のユーザー認証の最初のリリースでは、フェデレーション ID プロバイダーとしてメールの ID/パスワードと Sign in with Apple を介した認証のサポート(Android でのサポートを含む)を提供します。さらに、この新しいソリューションは拡張可能で、お好みでカスタマイズしたまたはサードパーティ製の追加のフェデレーション ID プロバイダーを統合できます。ユーザー認証では、一般的で簡略化された API を使用して Unity エディター内で ID プロバイダーを複数のプラットフォームにわたって設定できます。これにより、開発時間が数週間から数日短縮されるだけでなく、認証を簡単にするより多くの選択肢を顧客に提供できるようになります。消費者のプライバシー意識が高くなるにつれて、認証の代替案に対するニーズは高まります。

ユーザー認証のアルファ版は、今年後半にリリースされます。先行体験するにはサインアップしてください。

2019年9月19日 カテゴリ: Engine & platform | 6 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック