2016-09-30 105 views
0

我想使用AWS Cognito Unity SDK通过Facebook登录认证用户。如何使用AWS Cognito进行Facebook身份验证?

这是我的代码:

void Start() 

{ 
    InitCognito(); 

} 
public void InitCognito() 
{ 
    UnityInitializer.AttachToGameObject (this.gameObject); 
    credentials = new CognitoAWSCredentials (
     identity_pool_id, // Identity Pool ID 
     region // Region 
    ); 

    Debug.Log ("identity_pool_id = " + identity_pool_id + " region = " + region); 

    credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> 
     result) { 
     if (result.Exception != null) { 
      Debug.LogError(result.Exception.ToString()); 
     } 
     string identityId = result.Response; 
     Debug.Log("identityId = "+identityId); 
     FBInit(); 
    }); 



} 



public void FBInit() 
{ 
    FB.Init(this.OnInitComplete, this.OnHideUnity); 
    Debug.Log("FB.Init() called with " + FB.AppId); 

} 

public void FBLogin() 
{ 

    FB.LogInWithReadPermissions(new List<string>() { "public_profile", "email", "user_friends" }, this.HandleResult); 

} 


private void OnInitComplete() 
{ 
    Debug.Log("Success - Check log for details"); 
    Debug.Log("Success Response: OnInitComplete Called\n"); 
    Debug.Log(string.Format(
     "OnInitCompleteCalled IsLoggedIn='{0}' IsInitialized='{1}'", 
     FB.IsLoggedIn, 
     FB.IsInitialized)); 

    if (AccessToken.CurrentAccessToken != null) 
    { 
     Debug.Log("Access token = "+AccessToken.CurrentAccessToken.ToString()); 
    } 
    FBLogin(); 
} 

private void OnHideUnity(bool isGameShown) 
{ 
    Debug.Log("Success - Check log for details"); 
    Debug.Log(string.Format("Success Response: OnHideUnity Called {0}\n", isGameShown)); 
    Debug.Log("Is game shown: " + isGameShown); 
} 
protected void HandleResult(IResult result) 
{ 
    if (result == null) 
    { 
     Debug.Log("Null Response\n"); 

     return; 
    } 



    // Some platforms return the empty string instead of null. 
    if (!string.IsNullOrEmpty(result.Error)) 
    { 
     Debug.Log("Error - Check log for details"); 
     Debug.Log("Error Response:\n" + result.Error); 
    } 
    else if (result.Cancelled) 
    { 
     Debug.Log ("Cancelled - Check log for details"); 
     Debug.Log("Cancelled Response:\n" + result.RawResult); 
    } 
    else if (!string.IsNullOrEmpty(result.RawResult)) 
    { 
     Debug.Log ("Success - Check log for details"); 
     Debug.Log ("Success Response:\n" + result.RawResult); 
     Debug.Log ("Access Token = "+AccessToken.CurrentAccessToken); 
     Debug.Log ("Access Token = "+AccessToken.CurrentAccessToken.TokenString); 
     Debug.Log ("Access User Id =" + AccessToken.CurrentAccessToken.UserId); 
     credentials.AddLogin ("graph.facebook.com", AccessToken.CurrentAccessToken.TokenString); 
     if (credentials.CurrentLoginProviders.Length > 0) { 
      Debug.Log (credentials.CurrentLoginProviders[0]); 
     } 

     Debug.Log (credentials.GetCachedIdentityId()); 
    } 
    else 
    { 
     Debug.Log ("Empty Response\n"); 
    } 


} 

当执行InitCognito()方法,我得到一个未经授权的身份标识(一旦我重新安装了相同的设备,未经授权身份标识的变化对这个应用程序)。然后,我可以成功获取Facebook用户标识和令牌。

遵循Cognito开发者指南,我使用credentials.AddLogin()添加Facebook登录。但执行此方法后,Debug.Log (credentials.GetCachedIdentityId())显示身份标识与未经授权的身份标识相同,而不是指向Facebook标识的特定标识,并且AWS Cognito控制台显示没有“链接的登录”。我是否以错误的方式使用credentials.AddLogin()

谢谢!

回答

0

设置登录标记并不一定意味着SDK将其发送到服务器。你可以尝试运行下面的命令,这应该强制它?我猜你看到相同身份的原因是它没有将服务器更新到更改。它从Cognito developer guide中拉出。

credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) { 
    if (result.Exception != null) { 
     //Exception! 
    } 
    string identityId = result.Response; 
}); 
相关问题