2012-10-16 16 views
16

मुझे फेसबुक 3.1 ios sdk में प्रकाशित अनुमतियों के साथ लॉग इन करने में समस्या हो रही है।फेसबुक आईओएस 3.1 एसडीके लॉगिन प्रकाशित अनुमति कॉलबैक के साथ लॉगिन

मेरे ऐप में एक वीडियो साझा करने के लिए एक बटन है, और जब उपयोगकर्ता इसे क्लिक करता है तो मैं मूल + प्रकाशन अनुमति जोड़ना चाहता हूं। मैं समझता हूँ के रूप में, मैं दो कॉल करना है -

  1. openActiveSessionWithReadPermissions, और फिर
  2. reauthorizeWithPublishPermissions

यहाँ कोड मैं अब का उपयोग कर रहा है:

//Opens a Facebook session and optionally shows the login UX. 
- (void)openSessionForReadPermissions 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 

     //this is called even from the reauthorizeWithPublishPermissions 
     if (state == FBSessionStateOpen && !error) 
     { 
      [self openSessionForPublishPermissions]; 
     } 
     else if (state == FBSessionStateClosedLoginFailed) 
     { 
      [FBSession.activeSession closeAndClearTokenInformation]; 

      [[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session]; 
     } 
    }]; 
} 

-(void)openSessionForPublishPermissions 
{  
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"]; 

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions 
               defaultAudience:FBSessionDefaultAudienceFriends 
               completionHandler: 
    ^(FBSession *session, NSError *error) 
    { 
     if (!error) 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginSuccessNotification 
       object:session]; 
     } 
     else 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginErrorNotification 
       object:session]; 
     } 
    }]; 
} 

मुझे लगता है कि देख openSessionForReadPermissions में ब्लॉक को दो बार कहा जाता है (एक बार FBSessionStateOpen के साथ और एक बार FBSessionStateOpenToken के साथ OpenSessionForPublishPermissions कॉल से विस्तारित), ए और जब मैं ऐप में लॉगिन करने का प्रयास करता हूं तो मुझे एक त्रुटिReauthorizeFailedReasonUserCancelled मिलता है (यदि आपने पहले सभी ऐप अनुमतियां हटा दी हैं)।

इस लॉगिन को लागू करने का सही तरीका क्या है? इस सुविधा को छोड़कर ऐप को फेसबुक लॉग-इन की आवश्यकता नहीं है, इसलिए लॉगिन प्रक्रिया एक ही बटन पुश पर होनी चाहिए।

धन्यवाद!

+0

+1 हम एक ही मुद्दे से फंस गए हैं, खासकर जब मिश्रित अनुमति कॉल को हटा दिया गया है। –

+0

reauthorizeWithPublishPermissions को कम किया गया है। इसके बजाय अनुरोध नया प्रकाशित करेंप्रमिशन का उपयोग करें। – John

उत्तर

26

मैं इस मुद्दे पर भाग गया। मुझे मिला समाधान मुझे dispatch_async ब्लॉक में [self openSessionForPublishPermissions]; पर कॉल लपेट रहा था।

उदाहरण:

dispatch_async(dispatch_get_current_queue(), ^{ 
    [self openSessionForPublishPermissions]; 
}); 

कारण कॉल पुनः प्राधिकृत करना है कि .. की जरूरत घटना पाश जिनमें से openActiveSession .. कहा जाता है के बाद हो रहा है।

+0

धन्यवाद! यह बग दिन के लिए मेरे सिर को तोड़ रहा है। – Tiddly

0

ब्रेकपॉइंट मारने के लिए यह कोई समय-समय पर हो सकता है? इस त्रुटि को एक बार मिला लेकिन ब्रेकपॉइंट्स अक्षम होने के बाद फिर से नहीं चला।

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