2015-07-14 6 views
6

Ich versuche, eine Facebook-Login-Option in meiner App zu implementieren. Ich habe alle Anweisungen auf der Parse-Website und auf der Facebook-Entwickler-Seite befolgt. Ich fügte hinzu, die Rahmenbedingungen, modifiziert, um die plist-Datei und hinzugefügt, um den richtigen Code, aber wenn ich die App starten, bekomme ich diese Ausnahme:Facebook Login Integration in Parse.com App

2015-07-14 17:50:08.939 ########[35815:2144465] -[ParseManager coreManager]: unrecognized selector sent to instance 0x7f9cdadad720 
2015-07-14 17:50:08.953 ########[35815:2144465] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ParseManager coreManager]: unrecognized selector sent to instance 0x7f9cdadad720' 
*** First throw call stack: 
(
0 CoreFoundation      0x000000010a3cdc65 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x000000010a066bb7 objc_exception_throw + 45 
2 CoreFoundation      0x000000010a3d50ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205 
3 CoreFoundation      0x000000010a32b13c ___forwarding___ + 988 
4 CoreFoundation      0x000000010a32acd8 _CF_forwarding_prep_0 + 120 
5 ########       0x0000000105c822f0 +[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:] + 151 
6 ########       0x0000000105954c6c -[SMAppDelegate application:didFinishLaunchingWithOptions:] + 1132 
7 UIKit        0x00000001088ef748 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 240 
8 UIKit        0x00000001088f0357 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2540 
9 UIKit        0x00000001088f319e -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349 
10 UIKit        0x00000001088f2095 -[UIApplication workspaceDidEndTransaction:] + 179 
11 FrontBoardServices     0x000000010be2b5e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21 
12 CoreFoundation      0x000000010a30141c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
13 CoreFoundation      0x000000010a2f7165 __CFRunLoopDoBlocks + 341 
14 CoreFoundation      0x000000010a2f6f25 __CFRunLoopRun + 2389 
15 CoreFoundation      0x000000010a2f6366 CFRunLoopRunSpecific + 470 
16 UIKit        0x00000001088f1b02 -[UIApplication _run] + 413 
17 UIKit        0x00000001088f48c0 UIApplicationMain + 1282 
18 ########       0x00000001059c4a9f main + 111 
19 libdyld.dylib      0x000000010a918145 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Dies sind die Frameworks und Bibliotheken, die ich eigentlich an meinem Projekt haben: enter image description here

Die komische Sache ist, dass wenn ich ein neues Projekt von Null erstellen, ich überhaupt keine Probleme habe und der Login korrekt funktioniert.

Edit: Ich versuche immer noch, dieses Problem zu lösen. Ich schaffte es die App ohne Fehler zu starten, indem Sie die PFFacebookUtils Initialisierungscode [PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];-[PFFacebookUtils initialize]; ändern, aber dann, wenn ich versuche, mit dem Code über eine Schaltfläche um sich einzuloggen [PFFacebookUtils logInInBackgroundWithReadPermissions:nil block:^(PFUser *user, NSError *error) {} weitere Ausnahme erscheint Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'You must initialize PFFacebookUtils with a call to +initializeFacebookWithApplicationLaunchOptions'

Ich füge den Code ich benutze wie vorgeschlagen:

in meinem AppDelegate.m

#import <FBSDKCoreKit/FBSDKCoreKit.h> 
#import <ParseFacebookUtilsV4/PFFacebookUtils.h> 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

// PARSE 
[Parse setApplicationId: SMParseApplicationId 
       clientKey: SMParseClientId]; 

// FACEBOOK 
[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions]; 


[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions]; 
//***** 

// GOOGLE MAP API 
[GMSServices provideAPIKey: SMGoolgeMapApiKey]; 
//***** 

return [[FBSDKApplicationDelegate sharedInstance] application:application 
           didFinishLaunchingWithOptions:launchOptions]; 
} 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [[FBSDKApplicationDelegate sharedInstance] application:application 
                 openURL:url 
              sourceApplication:sourceApplication 
                annotation:annotation]; 
} 
- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [FBSDKAppEvents activateApp]; 
} 
+0

Haben Sie Ihre FacebookAppID und FacebookDisplayName sowie die URL-Typen ** korrekt hinzugefügt ** in Ihrem .plist? –

+0

Ja, tat ich. Ich habe es mehr als einmal getan, um sicher zu gehen, dass alles in Ordnung war. – Diego

+0

Ich schlage vor, Sie alle relevanten Code zu Fb anmelden, so dass wir sehen können, was falsch oder fehlt. – SanitLee

Antwort

5

es gibt einen Fehler in der Parse SDK wurde, ist here der Fehlerbericht mit der folgenden Antwort, es zu beheben.

1) Zum PFFacebookUtils.h

2) Änderung:

(void)initializeFacebookWithApplicationLaunchOptions:(NSDictionary *)launchOptions; 

zu:

(void)initializeFacebookWithApplicationLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions; 

jedoch Parse eine neuere Version des SDK freigegeben hat (v1.7.2), die das Problem lösen sollte. Überprüfen Sie, welches SDK Sie verwenden.

+0

Mir war dieser Bug bekannt, tatsächlich ist die Parse SDK-Version, die ich verwende, korrekt und hat die richtige Zeile in der PFFacebookUtils.h-Datei. – Diego

6

Ich habe diesen gleichen Kampf durchlebt und viele verschiedene Wege ausprobiert, Pars mit Facebook Login einzurichten. Ich muss jedoch sagen, ich habe keine Erfahrung mit Obj-C, aber hier ist meine Arbeit Swift Parse w/Facebook Login App, die ich hoffe, kann Ihnen einen Einblick geben.

In meinem AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 

    Parse.setApplicationId("ID", clientKey:"KEY") 
    PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions) 
    FBSDKProfile.enableUpdatesOnAccessTokenChange(true) 


    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
} 


func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    FBSDKAppEvents.activateApp() 
} 

In meinem LoginViewController.swift:

//My custom storyboard button 
    @IBAction func fbLogin(sender: AnyObject) { 

    var permissions = ["public_profile", "email"] 
    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { 
     (user: PFUser?, error: NSError?) -> Void in 
     if let user = user { 
      if user.isNew { 
       println("User signed up and logged in through Facebook!") 
       self.facebookSignUp(user) 
      } else { 
       println("User logged in through Facebook!") 
       self.performSegueWithIdentifier("LoginSuccessful", sender: self) 
      } 
     } else { 
      println("Uh oh. The user cancelled the Facebook login.") 
     } 
    } 
} 



override func viewDidLoad() { 
    super.viewDidLoad() 

    if PFUser.currentUser() != nil { 
     moveToNextView() //Segue to next ViewController 
    } 
} 


func facebookSignUp(user: PFUser) -> Void{ 
    var request = FBSDKGraphRequest(graphPath: "me", parameters: nil) 
    var userID:String 

    request.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in 
     if error == nil { 
      user["fullName"] = result["name"] 
      var facebookUserID = result["id"] as! String 
      user["facebookUserID"] = facebookUserID 

      user.save() 
      self.performSegueWithIdentifier("LoginSuccessful", sender: self) 

     } else { 
      println(error) 
      PFUser.logOut() 
     } 

    } 

} 
Verwandte Themen