2013-02-04 35 views
16

मैं फेसबुक एसडीके 3.1 पर दृश्य पूर्वावलोकन पोस्ट लागू करने के लिए इस tutorial अनुसरण कर रहा हूँ, लेकिन जब मैं इस विधि ... फोनFBSession: एक प्रयास एक बंद सत्र पर फिर से अधिकृत अनुमतियाँ बनाया गया था

// Ask for publish_actions permissions in context 
    if ([FBSession.activeSession.permissions 
     indexOfObject:@"publish_actions"] == NSNotFound) { 
     // No permissions found in session, ask for it 
     [FBSession.activeSession 
     reauthorizeWithPublishPermissions: 
     [NSArray arrayWithObject:@"publish_actions"] 
     defaultAudience:FBSessionDefaultAudienceFriends 
     completionHandler:^(FBSession *session, NSError *error) { 
      if (!error) { 
       // If permissions granted, publish the story 
       [self publishStory]; 
      } 
     }]; 
    } else { 
     // If permissions present, publish the story 
     [self publishStory]; 
    } 

* Terminating app due to uncaught exception 'com.facebook.sdk: InvalidOperationException', reason: 'FBSession: an attempt was made ​​reauthorize permissions on an unopened session'

कर सकते हैं क्या हो रहा है: ...

निम्नलिखित त्रुटि देता है? धन्यवाद!

संपादित करें: मेरे दोस्त Ran, आपको बहुत बहुत धन्यवाद, लेकिन अभी भी एक विस्तार है ... पहली बार उन्होंने आवेदन मैं गिरावट के इस खंड को अधिकृत अधिकृत करने के लिए पूछता पोस्ट When'll

/* * एक नया सत्र प्रकाशित साथ खोलने की अनुमति */

[FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] 
            defaultAudience:FBSessionDefaultAudienceOnlyMe 
             allowLoginUI:YES 
           completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
            if (!error && status == FBSessionStateOpen) { 
             [self publishStory]; 
            }else{ 
             NSLog(@"error"); 
             //Here I get the error mentioned below 
            } 
           }]; 
} 
त्रुटि के साथ

: त्रुटि:

domain = com.facebook.sdk, code = 5

उत्तर

48

त्रुटि कहती है कि एफबीएसशन खोला नहीं गया है। इसलिए आपको यह जांचना चाहिए कि क्या पुनः प्राधिकरण करने का प्रयास करने से पहले सत्र खोला गया है या नहीं।

if ([[FBSession activeSession] isOpen]) { 
    /* 
    * if the current session has no publish permission we need to reauthorize 
    */ 
    if ([[[FBSession activeSession] permissions]indexOfObject:@"publish_actions"] == NSNotFound) { 

     [[FBSession activeSession] requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends 
               completionHandler:^(FBSession *session,NSError *error){ 
                [self postPhoto]; 
               }]; 

    }else{ 
     [self publishStory]; 
    } 
}else{ 
    /* 
    * open a new session with publish permission 
    */ 
    [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] 
             defaultAudience:FBSessionDefaultAudienceOnlyMe 
              allowLoginUI:YES 
            completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
             if (!error && status == FBSessionStateOpen) { 
              [self publishStory]; 
             }else{ 
              NSLog(@"error"); 
             } 
            }]; 
} 

लगातार उन्हीं अनुमतियों जो publish_actions (बहुवचन मन) होना चाहिए के लिए अनुरोध करने के लिए सुनिश्चित करें।

+0

ने पोस्ट संपादित किया, अच्छी तरह से काम किया, हालांकि मेरे पास अभी भी एक विवरण है – jucajl

+0

मुझे एक ही त्रुटि है लेकिन जब मैं ShareKit का उपयोग कर रहा हूं। उस पर कोई विचार, शेयरकिट को सत्रों का ख्याल रखना चाहिए? – Myth1c

+2

यह ज्यादातर समय काम करता है, लेकिन ऐसा लगता है कि जब उपयोगकर्ता अभी भी खोला जाता है तो उपयोगकर्ता वेबिस्ट के माध्यम से फेसबुक अनुमतियों को रद्द करता है। – SAHM

3

तुम भी AppDelegate में किसी अन्य विधि की जरूरत है:

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 
    // attempt to extract a token from the url 
    return [FBAppCall handleOpenURL:url 
        sourceApplication:sourceApplication 
        fallbackHandler:^(FBAppCall *call) { 
         NSLog(@"In fallback handler"); 
        }]; 
} 

इस यूआरएल कॉलबैक संभाल लेंगे अगर प्रमाणीकरण सफारी में किया जाता है। उसके बाद एफबीएसशन खुलेगा।