Xamarin iOS:使用Facebook SDK登录按钮

基思

我们正在尝试在Xamarin iOS移动应用程序中实现一个简单(或我认为如此)的Facebook登录按钮。我已经安装了Xamarin.Facebook.iOS程序包,然后执行以下步骤:

  1. 将UIButton放到情节提要的视图中,并将其类更改为 FBSDKLoginButton
  2. 更新了我的View Controller进行设置 btnLogin.Permissions = new string[] { "email" }
  3. 将设置从https://developers.facebook.com/docs/app-events/getting-started-app-events-ios/复制到Info.plist(包括App ID等)
  4. 在Entitlements.plist中添加了keychain-access-groups字符串(我不记得为什么我需要这样做,但这解决了一个单独的问题)
        <dict>
            <key>keychain-access-groups</key>
            <array>
                <string>$(AppIdentifierPrefix)[appname]</string>
            </array>
        </dict>

这足以使一切在模拟器中正常工作,但是当我将其部署到TestFlight并安装到物理设备中时,facebook按钮打开模式,重定向到本机应用程序,我可以在其中批准登录,关闭Facebook应用程序,然后返回到模式。在模拟器中,模态关闭并且我已登录,但是在物理设备(iOS 13.5上的iPhone 11)上,模态只是坐在那里,而我没有登录。手动关闭模态窗口不会触发btnLogin.Completed事件。

如果我快速浏览iOS原生的官方Facebook SDK文档(迅速),则有iOS 13所需的SceneDelegate更新的一些具体提及:https : //developers.facebook.com/docs/app-events/getting-started- app-events-ios /我感觉这是相关的,但是我找不到运气如何在Xamarin iOS / C#中完成此功能的任何示例。我对快速的语言不太熟悉,无法将其翻译成可以在我的应用程序中使用的语言。

如果您使用的是iOS 13或更高版本,请在SceneDelegate中添加以下方法:

// SceneDelegate.swift

func scene(_ scene: UIScene, openURLContexts URLContexts:
Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
    return
}

ApplicationDelegate.shared.application(
    UIApplication.shared,
    open: url,
    sourceApplication: nil,
    annotation: [UIApplication.OpenURLOptionsKey.annotation]
) }

有没有人能在iOS 13+设备上让Facebook SDK登录按钮正常运行,并乐于分享您的成就吗?

更新:

经过更多的挖掘之后,我觉得这与在物理设备上的联系少了,而与Safari登录和本机Facebook应用程序登录的联系更多。不幸的是,无法在模拟器上测试本地FB登录,并且我正在使用Cloud mac,因此无法直接在设备上进行调试。看来我需要继续推动构建以进行测试,以便进行故障排除和测试。

基思

所以花了一些时间,但我终于使它起作用了。下面的代码更新:

AppDelegate.cs

更新FinishedLaunching方法:

    [Export ("application:didFinishLaunchingWithOptions:")]
    public bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
    {
        // Override point for customization after application launch.
        // If not required for your application you can safely delete this method
        Facebook.CoreKit.ApplicationDelegate.SharedInstance.FinishedLaunching(application, launchOptions);
        return true;
    }

SceneDelegate.cs

添加以下方法(在撰写本文时,默认情况下不包括在新的Xamarin iOS项目中):

    [Export("scene:openURLContexts:")]
    public void OpenUrlContexts(UIScene scene, NSSet<UIOpenUrlContext> urlContexts)
    {
        var urlString = urlContexts.AnyObject.Url;
        Facebook.CoreKit.ApplicationDelegate.SharedInstance.OpenUrl(
            UIApplication.SharedApplication,
            urlString,
            null,
            UIApplication.LaunchOptionsUrlKey
        );
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章