2013-06-18 6 views
5

दिखा रहा है मैंने फेसबुक के साथ प्रमाणीकरण के लिए फेसबुक एसडीके का उपयोग किया है। जब कोई फेसबुक खाता फिर बटन क्षुधा पर क्लिक करके सेटिंग में सक्षम यानीACAccountType हमेशा 0 खाते

if (appDelegate.session.state != FBSessionStateCreated) 
    { 
     appDelegate.session = [[FBSession alloc] init]; 
    } 

    [appDelegate.session openWithCompletionHandler:^(FBSession *session, 
                FBSessionState status, 
                NSError *error) { 
     // and here we make sure to update our UX according to the new session state 
     [self updateView]; 
    }]; 

प्रमाणीकरण के लिए सफ़ारी जाता है अन्यथा यदि फेसबुक खाता तो सक्षम किया गया है

NSArray *fbAccounts=nil; 
    ACAccountType *accountTypeFB; 
    if ((_accountStore = [[ACAccountStore alloc] init]) && 
     (accountTypeFB = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook])){ 
     fbAccounts = [_accountStore accountsWithAccountType:accountTypeFB]; 
     NSLog(@" %d fbAccounts",[fbAccounts count]); 
    } 
    if ([fbAccounts count]!=0) { 

     [FBSession openActiveSessionWithAllowLoginUI:YES]; 
     NSArray *permissions = [[NSArray alloc] initWithObjects: 
           @"email", 
           nil]; 

     [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
      if (error) { 
       NSLog(@"Failure"); 
       NSLog(@"error %@",error); 
      } 
      else 
      { 
       NSLog(@" active session opened "); 
       if (self.gotUserDetails) 
       { 
        return; 
       } 
       [self fetchuserinfo]; 
      } 
     }]; 
    } 

enter image description here}

यह छवि उपयोगकर्ता जानकारी तक पहुंचने के लिए अलर्ट दिखा रही है। यह सिम्युलेटर में ठीक काम कर रहा है। लेकिन डिवाइस में यह हमेशा सफारी या प्रमाणीकरण के लिए फेसबुक ऐप में जाता है, यहां तक ​​कि सेटिंग में फेसबुक अकाउंट सक्षम है। इस मुद्दे को खोजने के लिए कृपया मेरी मदद करें।

सभी के लिए धन्यवाद।

+0

क्या आपने 'requestAccessToAccountsWithType: विकल्प: समापन:' कहा है? – Wain

+0

@Wain मुझे इसे कहां कॉल करना चाहिए? –

उत्तर

1

आप एफबी खाते तक पहुंचने के लिए केवल accountTypeWithAccountTypeIdentifier पर कॉल नहीं कर सकते हैं, आपको संपत्तियों की आपूर्ति करने की आवश्यकता है। इसे requestAccessToAccountsWithType:options:completion: का उपयोग करके किया जाना चाहिए और एक असीमित प्रतिक्रिया है।

अपने बैकअप वेब आधारित ऑथ को एक अलग विधि में ले जाएं, फिर जांचें कि क्या आप खाता स्टोर बना सकते हैं या नहीं। यदि नहीं, तो वेब विधि पर कॉल करें। यदि आप कर सकते हैं, तो requestAccessToAccountsWithType:options:completion: के साथ एफबी खाते तक पहुंच प्राप्त करने का प्रयास करें। समापन ब्लॉक में आपको या तो पहुंच प्रदान की जाएगी या आप वेब विधि को कॉल करेंगे।

यह कोड सभी मुख्य धागे पर चलना चाहिए। असीमित प्रतिक्रिया को एक अलग थ्रेड पर बुलाया जा सकता है, इसलिए अपने हैंडलिंग को पूरा करने के लिए मुख्य थ्रेड पर वापस स्विच करें।


... भागों में भरें।

- (void)webAuthorise {...} 

- (void)authorise { 
if(!_accountStore) 
    _accountStore = [[ACAccountStore alloc] init]; 

ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

if (facebookTypeAccount == nil) { 
    NSLog(@"Failed, No account"); 
    [self webAuthorise]; 
    return; 
} 

[_accountStore requestAccessToAccountsWithType:facebookTypeAccount 
             options:@{ACFacebookAppIdKey: @"...", ACFacebookPermissionsKey: @[@"email"]} 
            completion:^(BOOL granted, NSError *error) { 
             dispatch_async(dispatch_get_main_queue(), ^{ 
             if(granted){ 
              NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount]; 
              _facebookAccount = [accounts lastObject]; 
              NSLog(@"Success"); 

              [self ...]; 
             } else { 
              NSLog(@"Failed, Error: %@", error); 

              [self webAuthorise]; 
             } 
             }); 
            }]; 
} 
+0

क्या आप कुछ नमूना कोड प्रदान कर सकते हैं @Wain –

+0

क्या आपकी समस्या हल हो गई है या आपको अभी भी नमूना कोड चाहिए? – Wain

+0

हल नहीं किया गया @Wain –

संबंधित मुद्दे