2017-05-16 8 views
1

これは愚かな質問ですが、ユーザーのログイン後に簡単にユーザーアクセストークンを保存するにはどうすればよいですか?ここでFacebookのユーザーアクセストークンを保存して読み込み

は、ボタンによってトリガーされ、私のコードの一部です:

public class FacebookLogin : MonoBehaviour { 


void Awake() 
{ 
    if (!FB.IsInitialized) 
    { 
     FB.Init(InitCallback, OnHideUnity); 
    } 
    else 
    { 
     FB.ActivateApp(); 
    } 
} 

private void InitCallback() 
{ 
    if (FB.IsInitialized) 
    { 
     FB.ActivateApp(); 
    } 
    else 
    { 
     Debug.Log("Failed to Initialize the Facebook SDK"); 
    } 
} 

private void OnHideUnity(bool isGameShown) 
{ 
    if (!isGameShown) 
    { 
     Time.timeScale = 0; 
    } 
    else 
    { 
     Time.timeScale = 1; 
    } 
} 

public void FBLogin() 
{ 
    List<string> perms = new List<string>() { "public_profile", "email", "user_friends" }; 
    FB.LogInWithReadPermissions(perms, AuthCallback); 
} 

private void AuthCallback(ILoginResult result) 
{ 
    if (FB.IsLoggedIn) 
    { 
     var aToken = Facebook.Unity.AccessToken.CurrentAccessToken; 

     FB.API("/me?fields=first_name", HttpMethod.GET, getName); 
     FB.API("/me/picture?type=square&height=128&width=128", HttpMethod.GET, getProfilePic); 
     SceneManager.LoadScene("Main_Menu"); 
    } 
    else 
    { 
     Debug.Log("User cancelled login"); 
    } 
} 

private void getName(IResult result) 
{ 
    LocalDataBase.Name = result.ResultDictionary["first_name"].ToString(); 
} 

private void getProfilePic(IGraphResult result) 
{ 
    LocalDataBase.profilePicture = result; 
} 

}

すべてのあなたの答えのために事前にありがとうございます。

+0

を私はよく分からないが、私はそれが許可されていないと思います。..いくつかの研究を必要とする。.. –

+0

私が保存したいトークンは です。var aToken = Facebook.Unity.AccessToken.CurrentAccessToken; –

+0

Facebook.Unity.AccesTokenです。私の問題は、それが正常に保存することはできませんsyncronizableではないことです。 –

答えて

2

FacebookのAccessTokenクラス内のすべての変数をラップするカスタムのシリアライズ可能なクラスを作成すると、トークンを保存できます。このカスタムクラスには、データをFacebookのAccessTokenクラスに変換するために使用できる関数が含まれている必要があります。

次に、カスタムクラスを保存してJsonとしてロードできます。

グラブDataSaverクラスthis投稿すると、データの保存と読み込みが簡単になります。カスタムクラスFaceBookTokenを呼び出します。

あなたのFacebookのトークン:

var aToken = Facebook.Unity.AccessToken.CurrentAccessToken; 

保存

FaceBookToken faceBookToken = FaceBookToken.createFaceBookToken(aToken); 
DataSaver.saveData(faceBookToken, "FB_Token"); 

ロード

FaceBookToken loadedFaceBookToken = DataSaver.loadData<FaceBookToken>("FB_Token"); 
//AccessToken loadedToken = loadedFaceBookToken.toAccessToken(); //OR 
AccessToken loadedToken = loadedFaceBookToken; 

適用データロード:それを適用することは可能か、許されているが、問題なくコンパイルするようであれば

Facebook.Unity.AccessToken.CurrentAccessToken = loadedToken; 

は知ってはいけません。

を削除します。

DataSaver.deleteData("FB_Token"); 

FaceBookTokenカスタムクラス:

[Serializable] 
public class FaceBookToken 
{ 
    public static AccessToken CurrentAccessToken; 
    public DateTime ExpirationTime; 
    public DateTime? LastRefresh; 
    public IEnumerable<string> Permissions; 
    public string TokenString; 
    public string UserId; 

    //Function that let's you easily create new instance of FaceBookToken from AccessToken 
    public static FaceBookToken createFaceBookToken(AccessToken currentToken) 
    { 
     FaceBookToken faceBookToken = new FaceBookToken(); 
     FaceBookToken.CurrentAccessToken = AccessToken.CurrentAccessToken; 
     faceBookToken.ExpirationTime = currentToken.ExpirationTime; 
     faceBookToken.LastRefresh = currentToken.LastRefresh; 
     faceBookToken.Permissions = currentToken.Permissions; 
     faceBookToken.TokenString = currentToken.TokenString; 
     faceBookToken.UserId = currentToken.UserId; 
     return faceBookToken; 
    } 

    //Converts our custom FaceBookToken to AccessToken 
    public AccessToken toAccessToken() 
    { 
     AccessToken loadedToken = new AccessToken(TokenString, UserId, 
      ExpirationTime, Permissions, LastRefresh); 
     return loadedToken; 
    } 

    //Converts our custom FaceBookToken to AccessToken(Implicit Cast) 
    public static implicit operator AccessToken(FaceBookToken currentToken) 
    { 
     AccessToken loadedToken = new AccessToken(currentToken.TokenString, currentToken.UserId, 
      currentToken.ExpirationTime, currentToken.Permissions, currentToken.LastRefresh); 
     return loadedToken; 
    } 
} 
関連する問題