我们正在尝试在Xamarin iOS移动应用中实现一个简单的(或我认为是)Facebook登录按钮。我已经安装了Xamarin.Facebook.iOS程序包,然后执行以下步骤:
FBSDKLoginButton
btnLogin.Permissions = new string[] { "email" }
<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,因此无法直接在设备上进行调试。看来我需要继续推动构建以进行测试,以便进行问题排查和测试。
所以花了一些时间,但终于使它工作了。下面的代码更新:
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;
}