我几乎在SDK中使用我的应用程序中的示例。而且效果很好。除了我有两个问题,与身份验证有关。 1.每次启动应用程序时,如何避免弹出webform?一旦我授权了我的应用程序,每次重新启动它时,我都会看到webform出现一秒钟然后关闭。在我看来,不是很干净。有没有办法检查我是否仍然登录,并在显示网络表单之前已经授予我的应用程序授权? 2.如果我在我的应用程序运行时变得未经身份验证,有没有办法让我轻松检测到它然后再次显示登录表单?
我认为我接近下面的代码,但不完全在那里。
提前致谢!
private string[] extendedPermissions = new[] { "read_stream", "offline_access" };
public Form1()
{
var fbLoginDialog = new FacebookLoginDialog(AppId, extendedPermissions);
//always shows login dialog, even if the app was just recently closed. Is this necessary?
fbLoginDialog.ShowDialog();
//every minute look for new posts
clockTimer.Elapsed += new System.Timers.ElapsedEventHandler(clockTimer_Elapsed);
DisplayAppropriateMessage(fbLoginDialog.FacebookOAuthResult);
GetAllData(unixTimeOfNewestPost);
InitializeComponent();
}
private void DisplayAppropriateMessage(FacebookOAuthResult facebookOAuthResult)
{
if (facebookOAuthResult != null)
{
if (facebookOAuthResult.IsSuccess)
{
_accessToken = facebookOAuthResult.AccessToken;
}
else
{
MessageBox.Show(facebookOAuthResult.ErrorDescription);
}
}
}
private void GetAllData(double unixTs)
{
var fb = new FacebookClient(_accessToken);
Facebook.JsonArray posts = new JsonArray();
try
{
var result = (IDictionary<string, object>)fb.Get("/me/home?since=" + unixTs + "&limit=1000");
posts = (Facebook.JsonArray)result["data"];
}
catch (FacebookOAuthException e)
{
MessageBox.Show("FacebookOAuthException",
"Facebook Authorization problem. The error message was '" + e.Message + "'.", null, "");
//show the login form again???
}
catch (Exception e)
{
Log("Exception. There was a general exception. The error message was '" + e.Message + "'.");
}
foreach (Facebook.JsonObject post in posts)
{
// do stuff with each post
}
} // end of GetPosts()
答案 0 :(得分:0)
1.每次启动应用程序时,如何避免网页弹出?一旦我授权了我的应用程序,每次重新启动它时,我都会看到webform出现一秒钟然后关闭。在我看来,不是很干净。有没有办法检查我是否仍然登录,并在显示网络表单之前已经给出了我的应用程序授权?
您需要在其他地方安全地保存访问令牌。如果您拥有该访问令牌,您甚至不需要请求登录对话框。
2.如果我在我的应用程序运行时变得未经身份验证,是否有办法让我轻松检测到它然后再次显示登录表单?
您需要为每个请求捕获FacebookOAuthException,然后要求用户登录