Xamarin iOS:使用Facebook SDK登录按钮

问题描述 投票:2回答:1

我们正在尝试在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(包括应用程序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)上,模态只是坐在那里,而我没有登录。手动关闭模态窗口不会触发[ C0]事件。

[如果快速浏览iOS原生的官方Facebook SDK文档(迅速),iOS 13需要一些特定的SceneDelegate更新:btnLogin.Completed。我感觉这是相关的,但是我没有运气找到在Xamarin iOS / C#中如何完成此操作的任何示例。我对快速的语言不太熟悉,无法将其翻译成可以在我的应用程序中使用的语言。

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

// SceneDelegate.swift

https://developers.facebook.com/docs/app-events/getting-started-app-events-ios/

有人在iOS 13+设备上运行Facebook SDK登录按钮是否有幸,并乐于分享您的完成情况?

UPDATE:

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

facebook xamarin xamarin.ios
1个回答
0
投票

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

AppDelegate.cs

更新FinishedLaunching方法:

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]
) }

SceneDelegate.cs

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

    [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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.