我正在尝试使用适用于 Xamarin.iOS 的 Facebook SDK(来自 Facebook,而不是来自 Octorcurve)来让用户在我的应用程序上获得身份验证。
我遵循了商店中组件附带的示例。该示例可以正常工作,但我在登录/权限后卡住了,没有触发事件来通知 viewController 我们有用户登录。我已经按照 facebook 的要求使用应用程序名称、id 和 Url 架构设置了 plist 文件开发工具包。所以,代码是:
请注意,我不是从代码创建 UI。我有一个带有 UI 的 .xib IB 文件,是的,我为 FBLoginView 添加了一个视图,并将其自定义类设置为 FBLoginView。
AppDelegate.cs(为简洁起见省略了其余代码):
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// create a new window instance based on the screen size
window = new UIWindow (UIScreen.MainScreen.Bounds);
viewController = new LoginViewController ();
navController = new UINavigationController (viewController);
window.RootViewController = navController;
window.MakeKeyAndVisible ();
return true;
}
public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
return FBSession.ActiveSession.HandleOpenURL(url);
}
public override void OnActivated (UIApplication application)
{
FBSession.ActiveSession.HandleDidBecomeActive();
}
LoginViewController.cs(NIB 文件的控制器):
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
loginView = btnLogin as FBLoginView;
loginView.ReadPermissions = new string[] { "email" };
loginView.PublishPermissions = new string[]{ "publish_actions", "publish_stream", "manage_pages" };
loginView.DefaultAudience = FBSessionDefaultAudience.Everyone;
loginView.ShowingLoggedInUser += (sender, e) =>
{
var a = e;
};
loginView.FetchedUserInfo += (sender, e) =>
{
user = e.User;
};
}
所以,这个代码我有两个问题:
请注意,我将 btnLogin 转换为 FBLoginView,因为 idk 如何在 Interface Builder 上设置插座以使用正确类型的 FBLoginView ...它总是说当我在 .h 文件中添加插座时找不到它的类型. 所以我只是将它创建为 UIView 并对代码进行了强制转换。此演员表有效且仍在工作,因为在同意 FB 屏幕上要求用户授权我正在传递的权限。
ShowingLoggedInUser 和 FetchedUserInfo 这两个事件永远不会被调用,AppDelegate 永远不会调用 OpenUrl,也不会调用 OnActivated。
我错过了什么吗?我所需要的只是获取登录后应该在某处返回的 access_token。我如何得到它?
我真的很感激任何帮助。
谢谢!