2012-11-19 18 views
6

मैं हाल ही में फेसबुक एसडीके 3.1 का उपयोग शुरू कर दिया है, और openActiveSessionWithReadPermissions का उपयोग करने में प्रवेश के साथ कुछ समस्याओं का सामना कर रहा हूँ।openActiveSessionWithReadPermissions में लॉग इन नहीं है स्वचालित रूप से

वास्तव में, पूरी तरह से काम करता है में loggin, अगर वहाँ एक कैश्ड टोकन उपलब्ध है, यह में फेसबुक यूआई पेश बिना लॉग करता है, और यदि नहीं, तो यह यूआई प्रस्तुत करता है। मैं reauthorizeWithPublishPermissions के लिए एक कॉल करने के बाद

समस्या होती है। अगर मैं reauthorizeWithPublishPermissions, तो पास फोन और आवेदन फिर से खोलना, और openActiveSessionWithReadPermissions को एक फोन करना है, यह फेसबुक यूआई प्रस्तुत करता है और कहने के लिए "हाँ मुझे पढ़ने अनुमतियों के साथ ठीक हूँ", भले ही कोई संचित टोकन उपलब्ध है उपयोगकर्ता की आवश्यकता है।

यह केवल फेसबुक यूआई ग़लती से प्रस्तुत करता है अगर मैं reauthorizeWithPublishPermissions को एक फोन करना है, अन्यथा सब कुछ ठीक काम करता है।

पढ़ने कोड के लिए खुला:

[FBSession openActiveSessionWithReadPermissions:readpermissions allowLoginUI:YES 
             completionHandler:^(FBSession *aSession, FBSessionState status, NSError *error) { 
      [self sessionStateChanged:[FBSession activeSession] state:status error:error]; 
      if (status != FBSessionStateOpenTokenExtended) { 
       // and here we make sure to update our UX according to the new session state 
       FBRequest *me = [[FBRequest alloc] initWithSession:aSession 
                 graphPath:@"me"]; 
       [me startWithCompletionHandler:^(FBRequestConnection *connection, 
               NSDictionary<FBGraphUser> *aUser, 
               NSError *error) { 
        self.user = aUser; 

        aCompletionBlock(aSession, status, error); 
       }]; 
      } 
     }]; 

sessionStateChanged समारोह:

- (void)sessionStateChanged:(FBSession *)aSession state:(FBSessionState)state error:(NSError *)error { 

    if (aSession.isOpen) { 
     // Initiate a Facebook instance and properties 
     if (nil == self.facebook || state == FBSessionStateOpenTokenExtended) { 
      self.facebook = [[Facebook alloc] 
          initWithAppId:FBSession.activeSession.appID 
          andDelegate:nil]; 

      // Store the Facebook session information 
      self.facebook.accessToken = FBSession.activeSession.accessToken; 
      self.facebook.expirationDate = FBSession.activeSession.expirationDate; 
     } 
    } else { 
     // Clear out the Facebook instance 
     if (state == FBSessionStateClosedLoginFailed) { 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     self.facebook = nil; 
    } 
} 

परीक्षण के लिए कॉल प्रकाशित करें, एक खाली aPublishAction साथ:

- (void)doPublishAction:(void(^)(FBSession *aSession, NSError *error))aPublishAction { 

    if ([FBSession.activeSession.permissions 
     indexOfObject:@"publish_actions"] == NSNotFound) { 

     NSArray *writepermissions = [[NSArray alloc] initWithObjects: 
            @"publish_stream", 
            @"publish_actions", 
            nil]; 

     [[FBSession activeSession]reauthorizeWithPublishPermissions:writepermissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *aSession, NSError *error){ 
      if (error) { 
       NSLog(@"Error on public permissions: %@", error); 
      } 
      else { 
       aPublishAction(aSession, error); 
      } 


     }]; 

    } 
    else { 
     // If permissions present, publish the story 
     aPublishAction(FBSession.activeSession, nil); 
    } 
} 

पहले से सब कुछ के लिए धन्यवाद , मैं किसी भी और सभी मदद के लिए आभारी होंगे !!

+0

मुझे लगता है कि publ_actions आपको वह चाहिए जो आपको चाहिए। मुझे लगता है कि अब यह publ_stream शामिल है। – SAHM

+0

क्या आपको कभी इसके लिए समाधान मिला है? मुझे एक ही समस्या है। – Casey

+0

समाधान कभी नहीं मिला, हमने वास्तव में प्रकाशित अनुमतियों की आवश्यकता बंद कर दी, इसलिए हमें समाधान खोजने की आवश्यकता नहीं थी। –

उत्तर

6

आप अपने ऐप के प्रतिनिधि में अपने -(void) applicationDidBecomeActive:(UIApplication *)application विधि के लिए

[FBSession.activeSession handleDidBecomeActive];

जोड़ने के लिए के रूप में migration गाइड में कहा गया है की जरूरत है।

+0

मेरे पास यह लाइन सेट है, फ़ंक्शन इस तरह दिखता है: '- (शून्य) एप्लिकेशनडिडबैकएक्टिव: (यूआईएप्लिकेशंस *) एप्लिकेशन { [FBSession.activeSession handleDidBecomeActive]; स्पष्टीकरण के लिए } ' , समस्या तब होती है जब मैं एप्लिकेशन को समाप्त और फिर से खोलता हूं। –

+0

हैलो। तो, जहां तक ​​मैं समझता हूं, क्या वहां कोई मौका है \ + [FBsession openActiveSessionWithReadPermissions: allowLoginUI: completHandler:] 'सत्र पहले से ही खुला है, फिर से कॉल किया जा रहा है? यदि ऐसा कभी होता है, तो डिफ़ॉल्ट व्यवहार सत्र को बंद करना और इसे फिर से खोलने का प्रयास करना है, जो इस मुद्दे को समझाएगा। – ale0xB

+0

मैं पुष्टि कर सकता हूं कि इसका कोई मौका नहीं है। जैसा कि मैंने कहा है, यह समस्या केवल तभी होती है जब पिछले एप्लिकेशन सत्र में 'reauthorizeWithPublishPermissions' को कॉल किया जाता है। इससे मुझे विश्वास होता है कि यही समस्या पैदा कर रहा है। –

-2

क्या होगा यदि आप openActiveSessionWithReadPermissions के बजाय openActiveSessionWithPermissions का उपयोग करें?

+0

जो मूल रूप से मैंने किया था, और यह पूरी तरह से काम करता था। लेकिन जैसा कि मैं इसे समझता हूं, यह फेसबुक एसडीके 3.0 से एक अवमूल्यन विधि है, और यह कि फेसबुक एसडीके 3.1 की नई प्रणाली पर स्विच करने के लिए, किसी को पढ़ने के अनुरोध के लिए 'openActiveSessionWithReadPermissions' का उपयोग करके, अलग-अलग अनुमतियों को पढ़ने और लिखने का अनुरोध करना चाहिए, और' पुनः प्राधिकृत करेंथब्लूशिशप्रमिशन लिखने का अनुरोध करने के लिए। यह इस नई प्रणाली पर है कि मुझे परेशानी हो रही है। –

+1

openActiveSessionWithPermissions को बहिष्कृत किया गया है। – gran33

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