Unityで
ソーシャルログイン機能を
実装してみた
株式会社qnote
賀好 昭仁
自己紹介
• 賀好 昭仁 @Ijoru
• PHP/JavaScript→Android/iOS→Unity
• 職場は猫だらけ
• ボドゲ好き
ソーシャルログイン
FacebookやTwitterなどの
SNSアカウントを使ってログインさせること
なんか良いことあるの?
• プレイまでのハードルを下げられる
• SNS情報の利用が可能
• 拡散の機会増加
• ユーザのモチベーション維持
• OSに依存しない
• 個人情報の管理が不要
• 俺ソーシャルログイン実装したことあるぜって言える
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
こんな要件があった
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
→ソーシャルログインなら要件を満たせる
Parseも使ってるし簡単に実装出来るはず
こんな要件があった
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
→ソーシャルログインなら要件を満たせる
Parseも使ってるし簡単に実装出来るはず
こんな要件があった
DEATH!
Parseとは?
Parseとは?
• Facebookが買収したmBaaS
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
• データやファイルは20GBまで無料
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
• データやファイルは20GBまで無料
• PUSH毎月100万台
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
• データやファイルは20GBまで無料
• PUSH毎月100万台
• 餃子一日100万個
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
• データやファイルは20GBまで無料
• PUSH毎月100万台
• 餃子一日100万個
• Android/iOS/UnityなどのSDKあり
Parseとは?
• Facebookが買収したmBaaS
• 秒間30リクエストまで無料
• データやファイルは20GBまで無料
• PUSH毎月100万台
• 餃子一日100万個
• Android/iOS/UnityなどのSDKあり
• Facebook/Twitterでのソーシャルログイン機能あり
だがしかし
ParseのUnitySDKは
ソーシャルログインに対応していなかった
ParseのUnitySDKは
ソーシャルログインに対応していなかった
||| orz |||
ソーシャルログイン用のライブラリを探す旅に
SOOMLA Profile
• Facebook/Twitter/Google+でのソーシャルログイン
• オープンソース
• アップデートが盛ん
• コミュニティがある
• 母体の課金ライブラリ「SOOMLA」が中々優秀
導入手順をかるーく
• SOOMLA Profileをインポート(Asset Store)
• Facebook SDKをインポート(Asset Store)
• CoreEventsとProfileEventsのPrefabを配置
• Window→Soomla→Edit Settings
• Facebook→Edit Settings
• SoomlaProfile.Initialize();
• 何はともあれこちらを見ながらやるべし
認証処理をかるーく
using UnityEngine;

using System.Collections;

using Soomla.Profile;



public class SceneController : MonoBehaviour

{

private void Start()

{

SoomlaProfile.Initialize();



ProfileEvents.OnSoomlaProfileInitialized
+= OnInitialized;

ProfileEvents.OnLoginFinished
+= OnLoginFinished;

ProfileEvents.OnLoginFailed
+= OnLoginFailed;

ProfileEvents.OnLoginCancelled
+= OnLoginCancelled;

}



認証処理をかるーく
private void OnSoomlaProfileInitialized()

{

// 試しにTwitterでログインしてみる

SoomlaProfile.Login(Provider.TWITTER);

}

private void OnLoginFinished(UserProfile profile,
bool autoLogin,
string payload)

{

Debug.Log(“ログイン完了”);
// Twitterは全アプリ共通
// Facebookはアプリ毎に変わるっぽい

Debug.Log("ProfileID:" + profile.ProfileId);
// ログインに使ったプロバイダ
// (FACEBOOK/TWITTER/GOOGLE)
Debug.Log("Provider:" +
profile.Provider.ToString());

// ログアウトしてみる

SoomlaProfile.Logout(profile.Provider);

}
private void OnLoginFailed(Provider provider,
string errorMessage,
bool autoLogin,
string payload)

{

Debug.Log("ログイン失敗");

}



private void OnLoginCancelled(Provider provider,
bool autoLogin,
string payload)

{

Debug.Log("ログインキャンセル");

}

}
実際やってみると色々ハマりました
コールバックの参照残ってますよ問題
・コールバックを登録しっぱなしだと、
 GameObjectが開放された時にNullPointerが発生
  コールバック内からGameObjectを操作すると発生し得る。
  →コールバックは不要になった時点で必ず消す
   ProfileEvents.OnSoomlaProfileInitialized -= OnInitialized;
(2015年7月時点のバージョンで発生)
SOOMLA Profileが結構バギーでした問題
・iOSの設定でTwitterを登録していると、必ずアプリが落ちる
  単純にネイティブプラグインのバグ。
  ただし、AssetにはFIX未反映だった。
   →プラグイン最新版をgitから落としてきて差し替えた
・ブラウザなどで先にログアウトすると、
 SOOMLA Profileでのログアウトに失敗する
  未ログインってみなされてログアウト失敗。
  でも SoomlaProfile.IsLoggedIn() は true を返し続ける。
   →アプリ側にログイン中かどうかのフラグを持たせた
・ログアウト→再ログインしようとしたとき、
 アカウント入力してないのに勝手にログインされる
  AndroidでのTwitterログインで発生。
  WebViewのキャッシュの問題っぽい。
   →キャッシュを毎回クリアするようにした
・AndroidでTwitterログインに失敗したとき、
 認証ウインドウの表示がおかしくなる
  ログイン失敗時にWebView内でリダイレクトループが発生、
  エラーメッセージが表示されてしまっていた。
   →特定のURLを受け取った時、ページ遷移させずに
    認証失敗の処理を実行するようにした
・iOSでTwitterログインすると頻繁に落ちる
  ネイティブプラグイン内でログイン成功&失敗の
  両方の処理が呼ばれることがあり、これが原因だった。
   →認証トークンを持っているのに失敗が呼ばれたときは
    処理をスキップするようにした
困った時はコミュニティを活用しよう
https://answers.soom.la/?
utm_source=soomla_profile&utm_medium=unity_plugin
そして頑張った結果・・・!
リジェクト
ソーシャルログインを実装する場合、確たる理由が無
いとダメ
(認証のためだけに使うのはNG)
https://developer.apple.com/app-store/review/
guidelines/#privacy
まとめ
• SOOMLA Profileは間違いなく使える
• ネイティブプラグインをいじる覚悟をするべし
• AndroidとiOSは別物と思うべし
• App Storeに出すならSNS連携を必ず実装すべし
• Game Centerでいいじゃんとか言われても泣かない
ご清聴ありがとうございましたm(_ _)m

Unityでソーシャルログイン機能を実装してみた