2015-07-14 14 views
6

Próbuję zaimplementować opcję logowania na Facebooka w mojej aplikacji. Postępowałem zgodnie ze wszystkimi instrukcjami na stronie Parse i na stronie dewelopera Facebooka. Dodałem ram, zmodyfikowany plik plist i dodaje odpowiedni kod, ale kiedy uruchomić aplikacji otrzymuję ten wyjątek:Integracja Facebooka z aplikacją Parse.com

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 

Są szkieletowe i biblioteki I rzeczywiście na moim projekcie: enter image description here

Dziwne jest to, że jeśli utworzę nowy projekt od zera, nie mam żadnych problemów i logowanie działa poprawnie.

Edycja: Nadal próbuję rozwiązać ten problem. Udało mi się uruchomić aplikację bez błędów przez zmianę kodu PFFacebookUtils inicjalizacji z [PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions]; do [PFFacebookUtils initialize]; ale wtedy, gdy próbuję się zalogować poprzez przycisk z kodem [PFFacebookUtils logInInBackgroundWithReadPermissions:nil block:^(PFUser *user, NSError *error) {} inny wyjątek pojawia Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'You must initialize PFFacebookUtils with a call to +initializeFacebookWithApplicationLaunchOptions'

Dodaję kod używam jak sugeruje:

w moim 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

byłaś dodany FacebookAppID i FacebookDisplayName jak również typy URL ** ** poprawnie w .plist? –

+0

Tak, zrobiłem. Zrobiłem to więcej niż raz, aby mieć pewność, że wszystko jest w porządku. – Diego

+0

Proponuję opublikować wszystkie istotne kody na logowanie Fb, abyśmy mogli zobaczyć, co jest nieprawidłowe lub brakuje. – SanitLee

Odpowiedz

5

Nastąpił błąd w Parse SDK here jest raport o błędzie o następującej odpowiedzi na to naprawić.

1) Idź do PFFacebookUtils.h

2) zmiana:

(void)initializeFacebookWithApplicationLaunchOptions:(NSDictionary *)launchOptions; 

do:

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

Jednak nie zwalnia Parse nowszą wersję swojego pakietu SDK (v1.7.2), który powinien rozwiązać problem. Sprawdź, jakiego pakietu SDK używasz.

+0

Byłem świadomy tego błędu, w rzeczywistości wersja programu Parse SDK, której używam, jest poprawna i ma właściwą linię w pliku PFFacebookUtils.h. – Diego

6

Przeszedłem przez tę samą walkę i próbowałem różnych sposobów, aby przygotować Parse z Facebookiem. Muszę jednak powiedzieć, że nie mam doświadczenia z Obj-C, ale oto moja działająca aplikacja Swift Parse w/Facebook Login, która, mam nadzieję, może dać ci pewien wgląd.

W moim 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() 
} 

W moim 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() 
     } 

    } 

} 
Powiązane problemy