Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Unityで
ソーシャルログイン機能を
実装してみた
株式会社qnote
賀好 昭仁
自己紹介
• 賀好 昭仁 @Ijoru
• PHP/JavaScript→Android/iOS→Unity
• 職場は猫だらけ
• ボドゲ好き
ソーシャルログイン
FacebookやTwitterなどの
SNSアカウントを使ってログインさせること
なんか良いことあるの?
• プレイまでのハードルを下げられる
• SNS情報の利用が可能
• 拡散の機会増加
• ユーザのモチベーション維持
• OSに依存しない
• 個人情報の管理が不要
• 俺ソーシャルログイン実装したことあるぜって言える
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
こんな要件があった
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
→ソーシャルログインなら要件を満たせる
Parseも使ってるし簡単に実装...
実装までの経緯
• 端末を落としても復旧可能にしたい
• ついでに複数の端末でデータを共有したい
• コストは出来るだけ抑えたい
• Android/iOS両対応させたい
→ソーシャルログインなら要件を満たせる
Parseも使ってるし簡単に実装...
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あり
• ...
だがしかし
ParseのUnitySDKは
ソーシャルログインに対応していなかった
ParseのUnitySDKは
ソーシャルログインに対応していなかった
||| orz |||
ソーシャルログイン用のライブラリを探す旅に
SOOMLA Profile
• Facebook/Twitter/Google+でのソーシャルログイン
• オープンソース
• アップデートが盛ん
• コミュニティがある
• 母体の課金ライブラリ「SOOMLA」が中々優秀
導入手順をかるーく
• SOOMLA Profileをインポート(Asset Store)
• Facebook SDKをインポート(Asset Store)
• CoreEventsとProfileEventsのPrefabを配置
• Win...
認証処理をかるーく
using UnityEngine;

using System.Collections;

using Soomla.Profile;



public class SceneController : MonoBehav...
認証処理をかるーく
private void OnSoomlaProfileInitialized()

{

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

SoomlaProfile.Login(Provider.TWITTER);

}

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

{

Debug.Log(“ログイン完了”);
// Twitterは全アプリ...
private void OnLoginFailed(Provider provider,
string errorMessage,
bool autoLogin,
string payload)

{

Debug.Log("ログイン失敗")...
実際やってみると色々ハマりました
コールバックの参照残ってますよ問題
・コールバックを登録しっぱなしだと、
 GameObjectが開放された時にNullPointerが発生
  コールバック内からGameObjectを操作すると発生し得る。
  →コールバックは不要になった時...
(2015年7月時点のバージョンで発生)
SOOMLA Profileが結構バギーでした問題
・iOSの設定でTwitterを登録していると、必ずアプリが落ちる
  単純にネイティブプラグインのバグ。
  ただし、AssetにはFIX未反映だっ...
・ブラウザなどで先にログアウトすると、
 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でソーシャルログイン機能を実装してみた
Unityでソーシャルログイン機能を実装してみた
Upcoming SlideShare
Loading in …5
×

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

22,816 views

Published on

2015/11/20 第35回代々木Unity勉強会

Published in: Software
  • Be the first to comment

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

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

  23. 23. 認証処理をかるーく private void OnSoomlaProfileInitialized()
 {
 // 試しにTwitterでログインしてみる
 SoomlaProfile.Login(Provider.TWITTER);
 }

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

×