2014-05-06 11 views
6

से ViewShowingLoggedInUser पहली बार फेसबुक एसडीके का उपयोग कर रहा हूं। मैं Xcode 5.1 और iOS के साथ काम कर रहा हूँ 7.लॉगिन करने के लिए कॉल नहीं हो रहा है FiewLoginView

मैं प्रोग्राम के रूप में प्रदर्शित FBLoginView:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"viewDidLoad"); 

    // Do any additional setup after loading the view. 

    if (!loginView) { 
     // loginView =[[FBLoginView alloc] initWithReadPermissions:@[@"basic_info"]]; 
     loginView =[[FBLoginView alloc] initWithReadPermissions:[NSArray arrayWithObjects:@"basic_info", @"user_location", nil]]; 
    } 
    loginView.delegate = self; 

    loginView.frame = CGRectOffset(loginView.frame, 
        (self.view.center.x -(loginView.frame.size.width /2)), 5); 
    CGPoint vCenter = CGPointMake(CGRectGetMidX(self.view.frame), 
            CGRectGetMidY(self.view.frame)); 
    CGPoint lvCenter = CGPointMake(vCenter.x, vCenter.y+100.0); 
    loginView.center = lvCenter; 
    [self.view addSubview:loginView]; 

    [self updateView]; 
} 

मैं आवश्यक ओवरराइड कार्यों को लागू किया है:

#pragma mark - FBLoginViewDelegate 

- (void) loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user { 
    NSLog(@"loginViewFetchedUserInfo"); 

    [self updateView]; 

} 
- (void) loginViewShowingLoggedInUser:(FBLoginView *)loginView { 
    NSLog(@"loginViewShowingLoggedInUser"); 

    [self updateView]; 

} 
- (void) loginViewShowingLoggedOutUser:(FBLoginView *)loginView { 
    NSLog(@"loginViewShowingLoggedOutUser"); 

    [self updateView]; 
} 

- (void)updateView { 
    NSLog(@"FB updateView"); 
    [[FBRequest requestForMe] startWithCompletionHandler: 
    ^(FBRequestConnection *connection, NSDictionary<FBGraphUser>*FBUser, NSError *error) { 
     if (error) { 
      NSLog(@"updateView - error"); 
     } else { 
      NSLog(@"updateView - good"); 
      NSNumber *owner_id = [NSNumber numberWithLong:[[FBUser id] longLongValue]]; 
      if (FB_user_id == nil) { 
       FB_user_id = owner_id; 
       NSLog(@"FBUser ID = %@", FB_user_id); 

       loggedInSession = [FBSession activeSession]; 
       [[NSUserDefaults standardUserDefaults] setObject:[FBUser id] forKey:@"eventOwnerID"]; 
       [self performSegueWithIdentifier:@"continue_to_app" sender:self]; 
      } 
     } 
    }]; 
    if ([self checkFacebookSession]) { 
    } 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.view setNeedsDisplay]; 
    }); 
} 

FBLoginView बटन के साथ दिखाई देता है "के साथ प्रवेश करें फेसबुक"। मैं लॉग इन कर सकता हूं और अनुमतियां स्वीकार कर सकता हूं, लेकिन loginViewShowingLoggedInUser ओवरराइड फ़ंक्शन को कभी भी कॉल नहीं किया जाता है।

- (BOOL) application:(UIApplication *) application 
       openURL:(NSURL *)url 
       sourceApplication:(NSString *)sourceApplication 
       annotation:(id)annotation 
{ 
    NSLog (@"application openURL"); 
    NSLog (@"URL = %@", url); 
    NSLog (@"Application = %@", sourceApplication); 
    // Call FBAppCall's ha 
    BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication]; 
    //[LoginUIViewController updateView]; 

    return wasHandled; 
} 

इस कोड को कोई प्रभाव नहीं पड़ा और मार डाला कभी नहीं किया गया था:

किसी ने निम्नलिखित जोड़ने का सुझाव दिया।

मैं क्या गलत कर रहा हूं?

+0

को मैं गंभीरता से दुनिया में केवल एक ही व्यक्ति इस भर में पता चला है कि है? – user3147421

+0

मुझे वर्तमान में समस्या है जहां आईफोन पर 8.3 चल रहा है, ऐप प्रतिनिधि यूआरएल योजना कभी नहीं बुलाई जाती है। लेकिन एक आईपैड पर 8.1 चल रहा है, इसे कहा जाता है। (आवेदन: openURL: sourceApplication: एनोटेशन :)। तो एक आईफोन पर, FBLoginView कभी भी एफबी अनुप्रयोग पर रीडायरेक्ट नहीं करता है। यह तुरंत स्वचालित रूप से प्रमाणीकृत करता है, और एफबी प्रोफाइल पढ़ता है। तो ऐसा लगता है कि मुझे उस मामले में स्पष्ट रूप से ऑथ सत्र का अनुरोध करने की आवश्यकता है। सभी सिमुलेटर पर, हालांकि, openUrl: ऐपडिलेगेट से कॉल का आह्वान किया जाता है .... सुनिश्चित नहीं है कि डिवाइस/ओएस संस्करणों के बीच व्यवहार का यह अंतर क्यों है। – Alex

उत्तर

3
  1. आप "basic_info" का उपयोग कर रहे @, इस फेसबुक के लिए त्रुटि निम्नलिखित पता चलता है जब मैं अपने कोड का परीक्षण करने की कोशिश की!

    - (BOOL) application:(UIApplication *) application 
          openURL:(NSURL *)url 
        sourceApplication:(NSString *)sourceApplication 
          annotation:(id)annotation 
    { 
        NSLog (@"application openURL"); 
        NSLog (@"URL = %@", url); 
        NSLog (@"Application = %@", sourceApplication); 
        // Call FBAppCall's ha 
        BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication]; 
        //[LoginUIViewController updateView]; 
    
        return wasHandled; 
    } 
    

यह अपने AppDelegate है, जो मेरे लिए काम करता में होना चाहिए:

Invalid Scope: basic_info. Use public_profile, user_friends instead 
  • मैं जहां विधि जोड़ने था जानने में दिलचस्पी थी।

  • +1

    यदि आपको # 1 त्रुटि मिलती है, तो आपको 'public_profile' के साथ' basic_info' को प्रतिस्थापित करने की आवश्यकता है। फेसबुक ने 31 अप्रैल 2014 से अपने एपीआई से 'basic_info' हटा दिया है। – Isuru

    2

    पढ़ने की अनुमतियां बदल दी गई हैं। इस संदर्भ लें: [https://developers.facebook.com/docs/apps/changelog#v2_0_permissions ] [1]

    त्रुटि "गुंजाइश invalide: बुनियादी जानकारी उपयोग public_profile, उपयोगकर्ता मित्र के बजाय" स्पष्ट रूप से कहा गया है कि "basic_info" अमान्य है और यह "public_profile" का उपयोग करने के सुझाव देते हैं या नए उपयोगकर्ता के रूप में "user_friends"।

    बदलें निम्नलिखित कोड में यह:

    self.loginView.readPermissions = @[@"basic_info"]; 
    

    self.loginView.readPermissions = @[@"public_profile"]; 
    
    संबंधित मुद्दे