如何获取 Facebook 登录令牌,在“您已经授权 APPName”Facebook 中单击“确定”按钮后
Posted
技术标签:
【中文标题】如何获取 Facebook 登录令牌,在“您已经授权 APPName”Facebook 中单击“确定”按钮后【英文标题】:How to get Facebook login token, after OK button clicked in "You have Already Authorized APPName" facebook 【发布时间】:2016-12-23 06:48:47 【问题描述】:我正在使用具有 android 和 ios 项目的 xamarin.forms PCL
以下是步骤:
我没有在我的 iphone 上使用 facebook 应用程序登录。
当我尝试注册 facebook 时,safari 打开,弹出消息打开“你已经授权 APPName”
我点击确定按钮,然后再次弹出“在 APPName 中打开页面”。我点击确定按钮
我得到 token = null 和 Iscancel = true;
下面是我的代码:
public class FacebookLoginButtonRenderer : ButtonRenderer
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
base.OnElementChanged(e);
if (Control != null)
UIButton button = Control;
button.TouchUpInside += delegate
HandleFacebookLoginClicked();
;
private void HandleFacebookLoginClicked()
LoginManager manager = new LoginManager();
manager.Init();
manager.LogOut();
manager.LoginBehavior = LoginBehavior.SystemAccount;
manager.LogInWithReadPermissions(new string[] "public_profile", "email", "user_birthday" , (result, error) =>
if (error != null)
App.OnFacebookAuthFailed();
return;
else if (result.IsCancelled)
return;
else
var UserToken = result.Token.TokenString;
if (UserToken != null)
var request = new Facebook.CoreKit.GraphRequest("/me?fields=id,email,first_name,last_name,gender,birthday", null, UserToken, null, "GET");
request.Start((connection, result1, error1) =>
if (error1 != null)
new UIAlertView("Error...", error.Description, null, "Ok", null).Show();
return;
var obj = result1 as NSDictionary;
FBModel fb = new FBModel();
fb.ID = obj["id"].ToString();
fb.Name = obj["first_name"].ToString();
fb.Email = obj["email"].ToString();
fb.LastName = obj["last_name"].ToString();
fb.Gender = obj["gender"].ToString();
if (obj.ContainsKey(new NSString("birthday")))
var birthdate = obj["birthday"].ToString();
fb.Age = DateTime.Today.Year - Convert.ToInt32(birthdate.Split('/')[2]);
else
fb.Age = 25;
App.OnFacebookIOSAuthSuccess(fb);
);
);
当我登录 Facebook 应用程序时,此代码完美运行。
请建议我哪里出错了。 如何获取令牌?
【问题讨论】:
【参考方案1】:1)打开Safari浏览器
2)注销 Facebook
3) 打开应用程序并再次登录 Facebook
private void HandleFacebookLoginClicked()
LoginManager login = new LoginManager();
login.LogInWithReadPermissions(readPermissions.ToArray(),
delegate(LoginManagerLoginResult result, NSError error)
if (error != null)
App.OnFacebookAuthFailed();
else if (result.IsCancelled)
App.OnFacebookAuthFailed();
else
var accessToken = result.Token;
App.OnFacebookAuthSuccess(accessToken.TokenString);
);
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
FBSettings.DefaultAppID = FacebookAppId;
FBSettings.DefaultDisplayName = FacebookAppName;
return base.FinishedLaunching(app, options);
public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
base.OpenUrl(application, url, sourceApplication, annotation);
return FBSession.ActiveSession.HandleOpenURL(url);
public override void OnActivated(UIApplication application)
base.OnActivated(application);
// We need to properly handle activation of the application with regards to SSO
// (e.g., returning from iOS 6.0 authorization dialog or from fast app switching).
FBSession.ActiveSession.HandleDidBecomeActive();
【讨论】:
我按照你说的做了改变,但我仍然得到了 result.IsCancelled = true 和 result.Token = null。 你添加了这个 FBSettings.DefaultAppID = FacebookAppId; FBSettings.DefaultDisplayName = FacebookAppName; 我正在使用 xamarin.facebook.IOS。我没有在该 DLL 中获得 FBSettings.DefaultAppID 属性。你能分享代码吗? 我正在发送 GitHub 代码,请查看github.com/IdoTene/XamarinFormsNativeFacebook 谢谢。您发送的链接不使用 xamarin.facebook.ios。它使用 MonoTouch.FacebookConnect。 1)我可以从哪里得到这个 MonoTouch.FacebookConnect dll。 2)这个问题可以通过xamarin.facebook.ios dll解决吗以上是关于如何获取 Facebook 登录令牌,在“您已经授权 APPName”Facebook 中单击“确定”按钮后的主要内容,如果未能解决你的问题,请参考以下文章
Android Facebook通过访问令牌获取登录的电子邮件地址
SwiftUI Facebook 登录:如何在视图中获取 Facebook id?