Facebook SDK:AccessToken.CurrentAccessToken 始终为空,即使在登录后也是如此
Facebook SDK: AccessToken.CurrentAccessToken always null, even after logging in
我正在使用以下代码(在 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 也总是空的。我尝试过认证后手动设置,但是当应用程序重新启动时,它又丢失了。
编辑
我已经删除了条件 "if (AccessToken.CurrentAccessToken != null)" 并且它发出的请求没有问题所以我想我只是使用了错误的方法来检测用户是否登录。正确的方法是什么?
感谢@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);
}
希望对您有所帮助。
我正在使用以下代码(在 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 也总是空的。我尝试过认证后手动设置,但是当应用程序重新启动时,它又丢失了。
编辑
我已经删除了条件 "if (AccessToken.CurrentAccessToken != null)" 并且它发出的请求没有问题所以我想我只是使用了错误的方法来检测用户是否登录。正确的方法是什么?
感谢@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);
}
希望对您有所帮助。