私は一晩中、半日苦労して諦めて、ここで助けを求めてきました。私はstackoverflowの上、ここで複数のスレッドを読んだが、すべてのソリューションは、動作しているようですが、これも、起動時にアプリがクラッシュしてもスウィフト3.0でFacebookとGoogleのサインインAPIの両方を実装
2016-10-26 16:03:58.793 MotivaMe[3997:404331] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MotivaMe.ViewController 0x7ff1a0407700> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key loginButtonFB.'
SOLUTION
固定SEEのBOTTOMはEDIT:コンパイラは言う:「アプリケーションの実装を:openURL:sourceApplication:annotation:not found。あなたのApp Delegateにハンドラを追加してください。 "特に認証後、私は立ち往生して、アプリケーションにリダイレクトされません
これは私がまだ私がまだ勉強しているココアタッチとは確信していないので、これは私がiOSをコーディングしようとする初めてです。 すべてのヘルプは感謝(私が間違っているものを手に入れることができないので、修正を超える説明は本当にいただければ幸い、皆のおかげで)
はここAppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
GIDSignIn.sharedInstance().delegate = self
return true
}
func application(application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
{
let googleDidHandle = GIDSignIn.sharedInstance().handle(
url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(
application,
open: url as URL!,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options [UIApplicationOpenURLOptionsKey.annotation])
return googleDidHandle || facebookDidHandle
}
// The sign-in flow has finished and was successful if |error| is |nil|.
func sign(_ doLoginGoogle: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!)
{
if (error == nil)
{
// Perform any operations on signed in user here.
let userId = user.userID // For client-side use only!
let idToken = user.authentication.idToken // Safe to send to the server
let fullName = user.profile.name
let givenName = user.profile.givenName
let familyName = user.profile.familyName
let email = user.profile.email
// ...
print(userId,idToken,fullName,givenName,familyName,email)
}
else
{
print("\(error.localizedDescription)")
}
}
されており、ここで評価されてViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().signInSilently()
}
@IBOutlet weak var doLoginFacebook: FBSDKLoginButton!
@IBOutlet weak var doLoginGoogle: GIDSignInButton!
func loginButtonDidLogOut(_ doLoginFacebook: FBSDKLoginButton!)
{
print("Did log out of facebook")
}
func loginButton(_ doLoginFacebook: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
{
if error != nil
{
print(error)
return
}
else
{
if(FBSDKAccessToken.current() != nil) //useless check but want to get confident with the api
{
//TODO implement switching pages on login
print("Sucessfully logged into facebook!")
}
}
}
ストーリーボードまたはNibを使用していますか? – dirtydanee