尚未经过生产环境测试,但它是一个非常简单的 Facebook SDK 的最小替代品。Facebook SDK 不仅是个隐私怪兽,而且可能导致地球上一半的 App 在启动时崩溃。它还应该能减少 App 的下载大小,节省数兆字节的空间。
功能集仅限于以与 FacebookSDK 非常相似的方式登录和注销,以及基本的 GraphRequest 功能。虽然 GraphRequest 功能在提交时完全没有经过任何测试,但它可以在我尝试的项目中构建和启动,并且包含这些附加功能/调整。
命名是因为我不喜欢马克·扎克伯格。
它仅依赖于 iOS 框架,没有第三方包,但你需要注入一些闭包才能使其正常工作。
它使用 ASWebAuthenticationSession 在 iOS 12+ 上提供良好的体验,并在较低版本上回退到推送至 Web 浏览器和返回*。
感谢 @marinbenc 的文章 在没有 Facebook SDK 的情况下在 iOS 上实现 Facebook 登录,本开发基于此。
还要感谢 Facebook 运维团队,他们最近引发的故障让我看到了希望,我可以可以说服客户从 App 中删除 Facebook SDK,为了用户的隐私利益,也为了减轻我最初为他们集成它时的良心负担,并且
import FMZDropInMinimalFacebookLogin
替换它们MinimalFacebook.currentConfig =
MinimalFacebook.Config(
getTokenStringFromKeychain: { keyChain.getString(key: "FacebookLoginTokenString") },
setTokenStringToKeychain: {
if let token = $0 {
_ = keyChain.setString(token, key: "FacebookLoginTokenString")
} else {
keyChain.removeString(key: "FacebookLoginTokenString")
}
},
openUrl: { UIApplication.shared.open($0, options: [:]) })
可选但建议你检查已登录用户的令牌是否仍然有效。它在 10 秒内运行,以便在你所有的初始启动逻辑之后发生。如果用户已注销,它将使令牌失效。
if AccessToken.current != nil {
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
MinimalFacebook.validateCurrentToken()
}
}
你需要提供闭包来打开 URLs(对于 iOS 9、10、11),以及读取和写入钥匙串(因为 Apple 的 API 很笨拙,并且我不想添加另一个依赖项,因为你的项目中可能已经有包装器了)。当传递 nil 参数时,setTokenStringToKeyChain
闭包应删除该值。
在 iOS 10 的模拟器中,登录失败,因为 App 没有使用 URL 重新打开。我没有深入研究,iOS 上的用户群现在应该非常低。
我绝对对任何修复以及提高兼容性的更新感兴趣。最初,我根据单个项目的需求开发了它,如果一些小的添加可以帮助其他人,那将是很棒的,但我希望保持它的最小化,以获得小的 App 大小和可审查性。
随意编写一些测试。棘手的部分是与 App 启动和 Facebook 服务器的集成,因此必要的测试对我来说并不明显。但请尝试所有你能想到的场景,并随时告诉我。
我的 Twitter 是 @jl_hfl,请告诉我你的想法。请尽可能抵制和削减 Facebook 的资金。这旨在成为帮助人们和 App 迁移的工具,如果你在此上下文中使用它,我渴望提供支持。