我使用以下代码(在Xamarin上)使用最新的Facebook SDK登录(我也使用Parse来管理我的后端):
partial void LoginWithFacebook (UIButton sender)
{
LoginManager login = new LoginManager();
login.LogInWithReadPermissionsAsync(kPermissions).ContinueWith(t => {
if (t.IsFaulted && t.Exception != null) {
Console.Error.WriteLine("Error while authenticating: {0}", t.Exception.Message);
} else {
var result = t.Result;
if (result.IsCancelled) {
Console.Error.WriteLine("User canceled the operation");
} else {
Console.WriteLine("Authenticated!");
ParseFacebookUtils.LogInAsync(result.Token.UserID, result.Token.TokenString, (DateTime)result.Token.ExpirationDate).ContinueWith(loginTask => {
if (!loginTask.IsFaulted) {
InvokeOnMainThread(() => PerformSegue("GoToDashboard", null));
} else {
Console.Error.WriteLine("Could not login to Parse");
}
});
}
}
});
}
然后,要加载好友列表(他们也在使用应用程序),我使用以下代码:
if (AccessToken.CurrentAccessToken != null) {
var request = new GraphRequest ("me/friends", null);
request.Start (new GraphRequestHandler ((connection, result, error) => {
if (error != null) {
Console.Error.WriteLine("Error fetching the friends list");
} else {
Console.WriteLine("Result: {0}", result);
}
hud.Hide(true);
}));
}
但即使身份验证成功,AccessToken似乎也始终为null。我在验证后尝试手动设置,但是当应用程序重新启动时,它会再次丢失。
修改
我已删除条件" if(AccessToken.CurrentAccessToken!= null)"并且它使请求没有问题所以我想我只是用错误的方法来检测用户是否已登录。什么是正确的方法?
答案 0 :(得分:1)
感谢@VijayMasiwal引用的问题,我能够发现问题。我忘了在App Delegate中初始化Facebook。
以下是使用Facebook时应如何实施FinishedLaunching方法:
public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
Settings.AppID = kFacebookAppID;
Settings.DisplayName = kFacebookDisplayName;
// I had forgotten this line :)
return ApplicationDelegate.SharedInstance.FinishedLaunching (application, launchOptions);
}
希望有所帮助。