Ios Facebook登录问题,WebView未使用关闭(Swift 3.0 FacebookLogin 0.2.0)
我正在使用的播客来自我的播客文件:Ios Facebook登录问题,WebView未使用关闭(Swift 3.0 FacebookLogin 0.2.0),ios,facebook,swift3,facebook-ios-sdk,Ios,Facebook,Swift3,Facebook Ios Sdk,我正在使用的播客来自我的播客文件: 豆荚: -螺栓(1.8.4): -螺栓/接头(=1.8.4) -螺栓/任务(=1.8.4) -螺栓/接头(1.8.4): -螺栓/任务 -螺栓/任务(1.8.4) -FacebookCore(0.2.0): -螺栓(~>1.8) -FBSDKCoreKit(~>4.15) -FacebookLogin(0.2.0): -螺栓(~>1.8) -FacebookCore(~>0.2) -FBSDKCoreKit(~>4.15) -FBSDKLoginKit(~>4
豆荚:
-螺栓(1.8.4):
-螺栓/接头(=1.8.4)
-螺栓/任务(=1.8.4)
-螺栓/接头(1.8.4):
-螺栓/任务
-螺栓/任务(1.8.4)
-FacebookCore(0.2.0):
-螺栓(~>1.8)
-FBSDKCoreKit(~>4.15)
-FacebookLogin(0.2.0):
-螺栓(~>1.8)
-FacebookCore(~>0.2)
-FBSDKCoreKit(~>4.15)
-FBSDKLoginKit(~>4.15)
-FBSDKCoreKit(4.16.0):
-螺栓(~>1.7)
-FBSDKLoginKit(4.16.1):
-FBSDKCoreKit My LoginViewController.swift代码:
import FacebookLogin
class LoginViewController: UIViewController, LoginButtonDelegate {
/*!
@abstract Sent to the delegate when the button was used to login.
@param loginButton the sender
@param result The results of the login
@param error The error (if any) from the login
*/
override func viewDidLoad() {
super.viewDidLoad()
let loginButton = LoginButton(readPermissions: [ .publicProfile ])
loginButton.center = view.center
loginButton.delegate = self;
view.addSubview(loginButton)
}
/**
Called when the button was used to login and the process finished.
- parameter loginButton: Button that was used to login.
- parameter result: The result of the login.
*/
public func loginButtonDidCompleteLogin(_ loginButton: FacebookLogin.LoginButton, result: FacebookLogin.LoginResult){
print("hello!")
}
/**
Called when the button was used to logout.
- parameter loginButton: Button that was used to logout.
*/
public func loginButtonDidLogOut(_ loginButton: FacebookLogin.LoginButton){
print("goodbye")
}
我修改的AppDelegate.swift代码:
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
// Override point for customization after application launch.
return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return SDKApplicationDelegate.shared.application(application, open: url, options: [:])
}
上下文:我用POD下载了所有东西,xcode提示我将所有代码转换为swift 3.0,所以我这样做了。我按照以下指南开始并登录: 如果我在app delegate中没有第二个函数的情况下运行,我会被迫在登录后弹出的web视图中按“done”,然后我会得到一个响应“hello”,如果我在该点设置了断点,我会看到我的登录被视为已取消。此外,我初始化的facebook按钮仍然提示我登录,因此它肯定不起作用。此外,我还得到了以下错误: -canOpenURL:URL:“fbauth2:/”失败-错误:“操作无法完成。(OSStatus错误-10814)。” 但是,如果我保留该方法,它将关闭,但委托永远不会被调用。同时,该按钮继续提示我登录 My Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fbMYID</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>MYID</string>
<key>FacebookDisplayName</key>
<string>MYAPPNAME</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
CbundleUrlTypes
. 我猜测,鉴于当前版本的swift,用于登录的文档已经过时,或者我错过了指向某些先决条件的链接。如果你对我的问题有任何想法,请告诉我。我的info.plist应该已全部设置,否则我将在尝试登录时出错。我可以进入屏幕,屏幕上显示您已授予MYAPP权限。然后我继续按ok,如果我的应用程序委托中有openURL方法,它将关闭,或者保持空白。我强烈怀疑这与我在调用SDKApplicationDelegate时在open方法中留下空白dict的选项有关。谢谢首先从developer.facebook.com创建app,并在plist中添加您的appID
然后将一个按钮添加到情节提要中,并将此代码添加到应用程序中进行登录
let loginManager = LoginManager()
loginManager.logIn([.publicProfile], viewController: self) { loginResult in
switch loginResult
{
case .failed(let error):
print(error)
case .cancelled:
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print("granted \(grantedPermissions.contains("email"))")
print("Logged in user! \(loginResult)")
print("accesstoken - \(accessToken)")
print("user ID - \(accessToken.userId)")
}
}
通过Pod文件添加facebook有很多帮助,所以问题在于我的钥匙链共享。我一进入mytarget>capabilities>Keychain Share并启用它,它就工作了 检查我更新的问题,我添加了部分plist。你是说像那样吗?已经是这样了。很抱歉我误解了,但我仍然面临这个解决方案的例外。如果我对第一个应用程序id进行更改,那么我会得到一个异常,如果我将fbauth2添加到两个facebook应用程序id,那么我会得到另一个异常,如果我仅将其添加到最后一个id,那么我会得到一个异常。通过facebook,你真正想做什么,比如facebook登录和注销?是什么?你到底想做什么告诉我?很抱歉回复太晚了,但我想能够登录和注销facebook。我的登录按钮工作正常,我的密码很好,这是我的钥匙链共享。