Ho creato un'app di esempio in cui l'utente accede utilizzando il pulsante di accesso di Facebook.Login Facebook non torna all'app quando è stata eseguita la migrazione a Swift 3
Una volta effettuato l'accesso, viene visualizzata la schermata Nome utente e Email sulla schermata di accesso. Stava lavorando con Swift 2.3. Una volta migrato a Swift 3, ha smesso di funzionare.
- Step1: Login con Facebook Login Button
- Step2: Consenti autorizzazioni per e-mail e il profilo
- Fase 3: Qui si dovrebbe tornare alla schermata 1. Ma non è così. Allegare il registro Ottengo quando clicco sul pulsante "Ok".
Aggiornamento 1: l'app funziona correttamente su iOS 9.3. Il problema si verifica solo su dispositivi iOS 10.
2016-06-19 08:30:09.300070 MyApp[13942:1214112] [] nw_endpoint_handler_start [4 graph.facebook.com:443 initial path (null)]
2016-06-19 08:30:09.300484 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 initial path (null)] reported event path:start
2016-06-19 08:30:09.301255 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 waiting path (satisfied)] reported event path:satisfied
2016-06-19 08:30:09.302664 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event resolver:start_dns
2016-06-19 08:30:09.348956 MyApp[13942:1214130] [] nw_endpoint_resolver_update [4 graph.facebook.com:443 in_progress resolver (satisfied)] Adding endpoint handler for 31.13.79.246:443
2016-06-19 08:30:09.349570 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event resolver:receive_dns
2016-06-19 08:30:09.350027 MyApp[13942:1214130] [] nw_endpoint_resolver_start_next_child [4 graph.facebook.com:443 in_progress resolver (satisfied)] starting child endpoint 31.13.79.246:443
2016-06-19 08:30:09.350564 MyApp[13942:1214130] [] nw_host_stats_add_src recv too small, received 24, expected 28
2016-06-19 08:30:09.351022 MyApp[13942:1214130] [] nw_endpoint_resolver_start_next_child [4 graph.facebook.com:443 in_progress resolver (satisfied)] starting next child endpoint in 250ms
2016-06-19 08:30:09.351479 MyApp[13942:1214130] [] nw_endpoint_handler_start [4.1 31.13.79.246:443 initial path (null)]
2016-06-19 08:30:09.351862 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 initial path (null)] reported event path:start
2016-06-19 08:30:09.352596 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 waiting path (satisfied)] reported event path:satisfied
2016-06-19 08:30:09.352915 MyApp[13942:1214130] [] __nwlog_err_simulate_crash_libsystem libsystem simulate crash unavailable, [libsystem_network.dylib: nw_endpoint_get_hostname :: incorrect endpoint type 1]
2016-06-19 08:30:09.353524 MyApp[13942:1214130] [] nw_endpoint_get_hostname incorrect endpoint type 1, dumping backtrace:
[x86_64] libnetcore-805.0.0.2.2
0 libsystem_network.dylib 0x000000011186037f __nw_create_backtrace_string + 123
1 libsystem_network.dylib 0x000000011186246e nw_endpoint_get_hostname + 75
2 libnetwork.dylib 0x0000000112bc4be7 nw_endpoint_proxy_handler_should_use_proxy + 125
3 libnetwork.dylib 0x0000000112bd204f nw_endpoint_handler_path_change + 1509
4 libnetwork.dylib 0x0000000112bd18a2 nw_endpoint_handler_start + 570
5 libnetwork.dylib 0x0000000112be8026 nw_endpoint_resolver_start_next_child + 2050
6 libdispatch.dylib 0x00000001115b91e8 _dispatch_call_block_and_release + 12
7 libdispatch.dylib 0x00000001115e5dee _dispatch_client_callout + 8
8 libdispatch.dylib 0x00000001115c0a1d _dispatch_queue_serial_drain + 239
9 libdi
2016-06-19 08:30:09.357989 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_connect
2016-06-19 08:30:09.468327 MyApp[13942:1214130] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Output protocol connected
2016-06-19 08:30:09.469541 MyApp[13942:1214130] [] nw_endpoint_flow_connected_path_change [4.1 31.13.79.246:443 ready socket-flow (satisfied)] Connected path is satisfied
2016-06-19 08:30:09.470103 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:finish_connect
2016-06-19 08:30:09.470858 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:finish_connect
2016-06-19 08:30:09.471427 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:changed_viability
2016-06-19 08:30:09.471870 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:changed_viability
2016-06-19 08:30:09.472479 MyApp[13942:1214112] [] nw_endpoint_start_tls_while_connected [4.1 31.13.79.246:443 ready socket-flow (satisfied)]
2016-06-19 08:30:09.473243 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_secondary_connect
2016-06-19 08:30:09.473685 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:start_secondary_connect
2016-06-19 08:30:09.474206 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:start_connect
2016-06-19 08:30:09.474740 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:start_connect
2016-06-19 08:30:09.475123 MyApp[13942:1214112] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Transport protocol connected
2016-06-19 08:30:09.475502 MyApp[13942:1214112] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] reported event flow:finish_transport
2016-06-19 08:30:09.475834 MyApp[13942:1214112] [] nw_connection_endpoint_report [4 graph.facebook.com:443 in_progress resolver (satisfied)] reported event flow:finish_transport
2016-06-19 08:30:09.586843 MyApp[13942:1214130] [] nw_endpoint_flow_protocol_connected [4.1 31.13.79.246:443 in_progress socket-flow (satisfied)] Output protocol connected
2016-06-19 08:30:09.588117 MyApp[13942:1214130] [] nw_endpoint_flow_connected_path_change [4.1 31.13.79.246:443 ready socket-flow (satisfied)] Connected path is satisfied
2016-06-19 08:30:09.588724 MyApp[13942:1214130] [] nw_connection_endpoint_report [4.1 31.13.79.246:443 ready socket-flow (satisfied)] reported event flow:finish_connect
2016-06-19 08:30:09.589299 MyApp[13942:1214130] [] nw_connection_endpoint_report [4 graph.facebook.com:443 ready resolver (satisfied)] reported event flow:finish_connect
Ecco il mio codice.
ViewController
import UIKit
import FBSDKCoreKit
import FBSDKLoginKit
import Firebase
class ViewController: UIViewController, FBSDKLoginButtonDelegate{
// Properties
@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var submitButton: UIButton!
@IBOutlet weak var fbLoginBtn: FBSDKLoginButton!
var ref:FIRDatabaseReference!
private let dataurl = "https://project-URL/"
override func viewDidLoad() {
super.viewDidLoad()
self.ref = FIRDatabase.database().reference()
fbLoginBtn.delegate = self
fbLoginBtn.readPermissions = ["email"]
// Do any additional setup after loading the view, typically from a nib.
}
//Actions
@IBAction func onSubmitBtnPressed(_ sender: UIButton) {
usernameLabel.text = usernameTextField.text;
}
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: NSError!) {
print("User Logged In")
if ((error) != nil)
{
// Process error
print("error")
}
else if result.isCancelled {
// Handle cancellations
print("cancelled")
}
else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email")
{
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
// Do work
print("logged in ")
FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in
if (user != nil) {
let uid = user?.uid as String!
self.fetchProfile(uid!);
}
})
}
}
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("User Logged Out")
}
func fetchProfile(_ uid: String) {
let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
var userinfo: [String:String] = [:]
FBSDKGraphRequest(graphPath: "me", parameters: parameters).start(completionHandler: { (connection, user, requestError) -> Void in
if requestError != nil {
print(requestError)
}
userinfo["email"] = user?["email"] as? String
userinfo["firstname"] = user?["first_name"] as? String
userinfo["lastname"] = user?["last_name"] as? String
self.ref.child("users").child(uid).setValue(userinfo)
})
}
}
AppDelegate
import UIKit
import Firebase
import FirebaseDatabase
import FBSDKCoreKit
import FBSDKLoginKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// Use Firebase library to configure APIs
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = true
return FBSDKApplicationDelegate.sharedInstance()
.application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(_ application: UIApplication, open url:URL,sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance()
.application(application, open: url,
sourceApplication: sourceApplication, annotation: annotation)
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
FBSDKAppEvents.activateApp()
}
}
Basta passare attraverso rapida documento 3.0 migrazione. – Tuple
Sì, l'ho verificato ma non sono riuscito a trovare nulla. Oggi ho provato ad eseguirlo su iOS 9.3 e funziona bene. Il problema è con l'esecuzione su dispositivi iOS 10 – Gaurav
Stiamo vedendo anche questo problema, ci sta facendo impazzire! –