2012-09-13 19 views
6

पर लॉग इन किया गया है, तो मैं आईओएस फेसबुक एसडीके 3.0 का उपयोग कर रहा हूं। मैं कैसे जांच सकता हूं कि उपयोगकर्ता पहले से लॉग इन है या नहीं?आईओएस फेसबुक एसडीके 3.0

मैंने नीचे दी गई रेखा की कोशिश की लेकिन यह ठीक से काम नहीं करता है। यह कभी-कभी रिटर्न नहीं करता है हालांकि मैं लॉग इन हूं। कोई सुझाव?

NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"user_likes", 
         @"read_stream", 
         @"publish_actions", 
         nil]; 
return [FBSession openActiveSessionWithPermissions:permissions 
             allowLoginUI:allowLoginUI 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

पहली बार यह लॉगिन की जरूरत है और इसलिए यह काम करता है:

if (FBSession.activeSession.isOpen == YES) 
{ 
    // post to wall else login 
} 

- - संपादित करें

यह कैसे मैं अपने फेसबुक सत्र खोलने है। अगर मैं इसे कोशिश करता हूं, जबकि मैं पहले से ही FBSession.activeSession.isOpen रिटर्न में लॉग इन हूं।

उत्तर

13

आप लॉगिन यूआई की अनुमति के बिना कोई नया सत्र को खोलने के लिए कोशिश कर रहा द्वारा जाँच कर सकते हैं अगर आप एक वैध टोकन आ

if (FBSession.activeSession.isOpen) 
{ 
    // post to wall 
} else { 
    // try to open session with existing valid token 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"user_likes", 
          @"read_stream", 
          @"publish_actions", 
          nil]; 
    FBSession *session = [[FBSession alloc] initWithPermissions:permissions]; 
    [FBSession setActiveSession:session]; 
    if([FBSession openActiveSessionWithAllowLoginUI:NO]) { 
     // post to wall 
    } else { 
     // you need to log the user 
    } 
} 
+0

संपादित बस मुझे हर बार प्रमाणित करने के लिए भेजता है। आप ऑथ टोकन को बनाए रखने के लिए एसडीके को कैसे मजबूर करते हैं? अनुमतियां ऐप से मेल खाते हैं लेकिन FBSessionStateCreatedTokenLoaded राज्य है। –

+0

यह उत्तर काम नहीं करता है और फेसबुक ऐप या UIWebView – jjxtra

+0

@PsychoDad के माध्यम से प्राप्त सिस्टम खाते बनाम टोकन के साथ समस्याएं हैं प्रश्न फेसबुक एसडीके 3 के लिए है।0 – Moxy

1

आप अपना एफबीएसशन कैसे खोल रहे हैं?

यदि आप कोई उदाहरण बना रहे हैं, तो FBSession.activeSession सेट करना सुनिश्चित करें। यह थोड़ी देर के लिए मेरा मुद्दा था।

+0

मैं अपने प्रश्न –

9

मैं में फेसबुक उदाहरण

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 
{ 

} 
+1

मुझे इस बारे में इतना यकीन नहीं है। session.state अब थोड़ा मुखौटा प्रतीत होता है। आप FBSessionStateOpenTokenExtended स्थिति भी प्राप्त कर सकते हैं। सत्र स्थिति के बारे में एक टिप्पणी है ओपन बिट: ओपन सत्र स्थिति जिसमें उपयोगकर्ता ने लॉग इन किया है या कैश किए गए टोकन उपलब्ध हैं। मुझे लगता है कि एक == तुलना सभी मामलों में काम नहीं करेगी। – John

2

सत्र के रूप में यह किया सक्रिय है यदि राज्य या तो FBSessionStateOpen या FBSessionStateOpenTokenExtended में है। आपको यह देखना होगा नीचे समारोह का उपयोग कर सकते है, तो उपयोगकर्ता के प्रवेश:

- (BOOL)isSessionOpen 
{ 
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended; 
} 
13

आप FBSDK अधिक से अधिक तो 4.x का उपयोग कर रहे हैं तो वहाँ FBSession की धारणा नहीं है। आपको केवल [FBSDKAccessToken currentAccessToken] का उपयोग करके सक्रिय सत्र मिलना है, बस यह जांचें कि क्या इसमें nil मान है, कोई सक्रिय सत्र नहीं है।

इसके बजाय, आप viewDidLoad या इसी तरह के कम से [FBSDKAccessToken currentAccessToken] जांच होनी चाहिए। यदि current token उपलब्ध है, तो पोस्ट-लॉगिन कार्य करें। कैश किए गए टोकन पुनर्प्राप्त करने के लिए आप currentAccessToken का भी उपयोग कर सकते हैं।

आप पा सकते हैं और अधिक यहाँ https://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession[FBSDKAccessToken currentAccessToken] और FBSDKLoginManager साथ प्रतिस्थापित किया गया। session state की कोई अवधारणा नहीं है। इसके बजाय, लॉगिन करने के लिए प्रबंधक का उपयोग करें और यह currentAccessToken संदर्भ सेट करता है।

0
if ([FBSDKAccessToken currentAccessToken]) 
{ 
    NSLog(@"Already login"); 
    //[FBSession openActiveSessionWithAllowLoginUI: YES]; 
} 
+0

आम तौर पर बोलने वाले उत्तरों को बेहतर तरीके से प्राप्त किया जाएगा यदि वे बताते हैं कि वे कुछ कोड फेंकने के बजाय क्यों/कैसे काम करते हैं। –