LoginSignup
4
3

More than 5 years have passed since last update.

UnityでSocialAPIを使う際の注意事項

Posted at

はじめに

UnityでLeaderboardを実装するためのSocialAPIを利用したのですが、気をつけないと不具合につながるケースがありました(というか進行不能の不具合をだしてしまいました)

環境

Unity: 5.5.0f3
ターゲット: iOS9以上
※Androidでは試していません

はまったのは認証API

こちらのドキュメントにあるように、認証したら成否を引数にコールバックを呼んでくれます。
https://docs.unity3d.com/ja/current/ScriptReference/Social-localUser.html

こんな感じですね。

public class SocialExample : MonoBehaviour {

    void Start () {
        Social.localUser.Authenticate (ProcessAuthentication);
    }

    void ProcessAuthentication (bool success) {
        if (success) {
            Debug.Log ("Authenticated");
        }
        else
            Debug.Log ("Failed to authenticate");
    }
}

とても簡単で便利ですね!
ただしよーくドキュメントを読むと次のページに注意書きがあります。
https://docs.unity3d.com/ja/current/ScriptReference/SocialPlatforms.ILocalUser.Authenticate.html

特定のプラットフォームではプログラムを 1 つ実行中に関数を呼び出すと、ユーザーや OS が認証するための最初の試みをキャンセルした場合、2 回目以降のコールバックが起動しない場合があります。

ふむふむ。認証画面を何度もださないようにプラットフォーム側が工夫しているんでしょうかね。

つまり2回以上呼び出さなきゃいいんだな と考えて、ローディングページで認証APIを呼んでコールバックを待つ実装にしていたのですが、1回目でもコールバックが返ってこないケースが発生していました。つまりローディングページから先に進めなくなるという致命的な不具合に。。。

自分の手元では起きていなかったので、リリース後にユーザーさんからの報告で気づきました。しばらくGameCenterまわりをさわっていない端末で起こっていそうです。
原因はよくわかっていないのですが、下記のような状況になっていました。

  • 認証APIのコールバックが返ってこないケースがある
  • それでもSocial.localUser.authenticatedはtrueを返す
  • その状態でリーダーボードを開くと、「データを読み込めません。」と表示される

いずれにせよ、
Social.localUser.Authenticateのコールバックを待つような実装をしてはいけない
ということですな:persevere:

今回のアプリは絶賛配信中です(もちろん不具合解消済み:stuck_out_tongue_winking_eye:

動画

配信:
iOS: https://itunes.apple.com/jp/app/id1189800250
Android: https://play.google.com/store/apps/details?id=com.keepgamesimple.rollingsphere

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3