这个问题是由于 AbstractFacebook 简单地忽略了从 Facebook API 收到的整个 FBResult 参数,包括当用户拒绝授予应用程序访问权限时的“cancelled”参数。
AbstractFacebook 的反编译 OnAuthResponse 方法如下所示:
protected void OnAuthResponse(FBResult result)
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary["is_logged_in"] = (object) (bool) (this.IsLoggedIn ? 1 : 0);
dictionary["user_id"] = (object) this.UserId;
dictionary["access_token"] = (object) this.AccessToken;
dictionary["access_token_expires_at"] = (object) this.AccessTokenExpiresAt;
FBResult result1 = new FBResult(Json.Serialize((object) dictionary), result.Error);
using (List<FacebookDelegate>.Enumerator enumerator = this.authDelegates.GetEnumerator())
{
while (enumerator.MoveNext())
{
FacebookDelegate current = enumerator.Current;
if (current != null)
current(result1);
}
}
this.authDelegates.Clear();
}
如果您可以以某种方式覆盖此行为,也许您可以从存储在 result.message 中的 JSON 格式中删除“已取消”参数。