2012-09-30 5 views
16

यह प्रश्न Facebook SDK for iOS , on iOS 4.0 device के समान है, लेकिन जैसा कि मैं वहां टिप्पणी नहीं कर सकता, मैं एक नया प्रश्न खोलता हूं। मुझे लगता है कि सवाल ही नहीं हैं:आईओएस 6 फेसबुक एकीकरण लॉगिन हमेशा FBSessionStateClosedLoginFailed कभी नहीं खुलता है

जब 3.1 फेसबुक के लिए मैं खोलने के लिए sessionStateChanged कॉलबैक हमेशा FBSessionStateClosedLoginFailed में समाप्त होता है फेसबुक सत्र नहीं मिल रहा है मेरे ऐप्लिकेशन के फेसबुक एकीकरण अद्यतन करने के लिए कोशिश कर रहा। मेरे सेटअप में मेरे पास मेरे एपडेगेट

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 
    // attempt to extract a token from the url 
    // return [self.session handleOpenURL:url]; 
    return [FBSession.activeSession handleOpenURL:url]; 
} 

में कॉलबैक है लेकिन इसे कभी नहीं कहा जाता है! इसे बुलाया नहीं जाना चाहिए? मैं फेसबुक प्रलेखन का पालन किया और

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 
    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil]; 
    return [FBSession openActiveSessionWithPublishPermissions:permissions 
               defaultAudience:FBSessionDefaultAudienceFriends 
               allowLoginUI:allowLoginUI 
             completionHandler:^(FBSession *session, 
                  FBSessionState state, 
                  NSError *error) { 
              [self sessionStateChanged:session 
                   state:state 
                   error:error]; 
             }]; 
} 

फोन मैं भी इरादा बाद में publish_actions अनुमति के लिए पुन: प्राधिकृत साथ फेसबुक ट्यूटोरियल उदाहरण के रूप में अनुमतियों के लिए

openActiveSessionWithReadPermissions की कोशिश की nil साथ। एक ही परिणाम: FBSessionStateClosedLogin फिर से विफल।

मैं भी सत्र को खोलने के लिए प्रयास करने से पहले

ACAccountStore *accountStore; 
    ACAccountType *accountTypeFB; 
    if ((accountStore = [[ACAccountStore alloc] init]) && 
     (accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook])){ 

     NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB]; 
     id account; 
     if (fbAccounts && [fbAccounts count] > 0 && 
      (account = [fbAccounts objectAtIndex:0])){ 

      [accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { 
       //we don't actually need to inspect renewResult or error. 
       if (error){ 

       } 
      }]; 
     } 
    } 

बुला की कोशिश की, लेकिन मैं इसे कभी मेरी iOS6 डिवाइस (iPhone 4S) पर खुला मिलता है। ऐप में मुझे अनुमति के लिए कहा जाता है, लेकिन फिर कुछ भी नहीं चल रहा है क्योंकि सत्र हमेशा राज्य FBSessionStateClosedLoginFailed है! सत्र स्थिति के लिए मेरे कॉलबैक

- (void)sessionStateChanged:(FBSession *)session 
         state:(FBSessionState) state 
         error:(NSError *)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: 
      if (!error) { 
       // We have a valid session 
       NSLog(@"User session found"); 
      } 
      break; 
     case FBSessionStateClosed: 
      NSLog(@"FBSessionStateClosed"); 
     case FBSessionStateClosedLoginFailed: 
      NSLog(@"FBSessionStateClosedLoginFailed"); 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      break; 
     default: 
      break; 
    } 

    [[NSNotificationCenter defaultCenter] 
    postNotificationName:FBSessionStateChangedNotification 
    object:session]; 

    if (error) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"facebook Hinweis" 
                 message:@"facebook Login nicht möglich, bitte versuchen Sie es erneut." 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
     NSLog(@"Facebook session error: %@", error.localizedDescription); 
    } 
} 
iOS 5 पर फेसबुक 3.0 मैं एक मुद्दा नहीं था तो मेरे फेसबुक अनुप्रयोग ठीक से सेट है साथ

है। मैं वास्तव में किसी भी मदद की सराहना करता हूं wchich मुझे फेसबुक सत्र खोलने में सक्षम बनाता है, फेसबुक 3.1 के साथ इन समस्याओं में भाग लेने के लिए नहीं सोचा था और दस्तावेज़ इस बिंदु पर मेरी सहायता नहीं कर रहे हैं, thx

+0

कृपया ध्यान दें: यह एक्सकोड से आईओएस 6 और आईओएस 5 सिम्युलेटर पर सही काम करता है। केवल वास्तविक डिवाइस पर यह वर्णित के रूप में नहीं खुल जाएगा। डिवाइस में फेसबुक सक्षम है, फेसबुक स्थापित है और एक फेसबुक अकाउंट से जुड़ा हुआ है। – robscure

+0

आईफोन पर काम कर रहा है, आईपैड पर काम करने की तुलना में आपके पास एक वीडर समस्या है। एक ही कोड, यह एक सार्वभौमिक ऐप है, एफबी तर्क पर कोई शर्त नहीं है। –

+0

मेरे पास एक ही समस्या है। क्या आपने इसे पहले ही हल कर लिया है? – edward

उत्तर

1

यहां तक ​​कि मैं टिप्पणी नहीं कर सकता इसे उत्तर के रूप में लिखना। मुझे यकीन नहीं है, मुझे संभावित कारणों का विश्लेषण करने दें 1) आपने कहा: "लेकिन इसे कभी नहीं कहा जाता है! इसे कॉल नहीं किया जाना चाहिए?" -

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 
    annotation:(id)annotation 

बुलाया पाने के लिए के लिए, Info.plist फ़ाइल में, url योजना ठीक से यानी सेट किया जाना चाहिए URL प्रकार के लिए जाने -> Item0 -> URL योजनाएं ---> आइटम 0 यहाँ मूल्य fbAPPID होना चाहिए यानी आपके वास्तविक facebookappID के साथ fb संलग्न करें [फेसबुक ऐपआईडी info.plist या हार्ड कोड कोड में मौजूद भी हो सकता है]।

2) आप ने कहा: "sessionStateChanged कॉलबैक हमेशा FBSessionStateClosedLoginFailed में समाप्त होता है"

sessionStateChanged स्विच विधि सत्र की स्थिति जांचने में और अगर यह बनाया गया है या createdTokenLoaded तो सत्र को खोलने का प्रयास।

नोट: [FBSession openActiveSessionWithPublishPermissions ....] जो एक स्थिर विधि है, एक नया सत्र तैयार करेगा और FBSession.activeSession पर सेट होगा जहां OpenWithCompletionHandler एक उदाहरण विधि है जो केवल तभी काम कर सकती है जब सत्र पहले से ही बनाया गया हो।

case FBSessionStateCreated: 
    case FBSessionStateCreatedTokenLoaded:{ 
     [session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
      //handle the updating of views according to the sate of session 
     }]; 
     break; 
+0

thx ravi! सौभाग्य से मुझे अपने प्रश्नों पर टिप्पणी करने की इजाजत है;) ओपनURL पर कॉल के संबंध में, हाँ, info.plist में मेरी यूआरएल योजना सही तरीके से कॉन्फ़िगर की गई है, मैंने इसे फिर से जांच लिया और 3.0 एसडीके के तहत कभी भी इसकी समस्या नहीं आई! मैंने बस FBSessionStateCreated और FBSessionStateCreatedTokenLoaded को OpenStithCompletionHandler के साथ sessionStateChanged में स्विच स्टेटमेंट में खोलने की कोशिश की है, जैसा कि आपने अनुशंसा की है, अनजाने में अभी भी केवल एकमात्र मूल्य राज्य हमेशा प्राप्त होता है FBSessionStateClosedLoginFailed और इस प्रकार ओपन विथ कॉम्प्लेशन हैंडलर ब्लॉक कभी नहीं कहा जाता है :( – robscure

+0

क्या ओपनURL हमेशा सामान्य रूप से कॉल किया जाता है? और किसी भी संकेत क्यों एक ही कोड iOS6 सिम्युलेटर पर खूबसूरती से काम करता है (जिसके लिए मैं फेसबुक ढांचे सेटिंग्स में हूबहू एक ही फेसबुक खाता के साथ विन्यस्त)? जब कुछ अन्य ऐप्लिकेशन url योजना का उपयोग कर अपने ऐप्लिकेशन का इस्तेमाल करने की कोशिश करता है – robscure

+0

OpenURL हमेशा कहा जाता है (fbappid: // ... जानकारी में।प्लस, आईओएस के साथ इस योजना को पंजीकृत करने वाला ऐप)। मुझे लगता है कि सिम्युलेटर में मूल ऐप नहीं है और प्रमाणीकरण के लिए सफारी या वेब व्यू का उपयोग करता है। यह विभिन्न व्यवहार बी/डब्ल्यू डिवाइस और सिम्युलेटर के कारण हो सकता है। यह भी देखें कि आप इसे पृष्ठभूमि में भेजने पर सत्र बंद नहीं कर रहे हैं। – ravi

40

मैं एक ही समस्या थी, और यह था क्योंकि मैं अपने AppDelegate

+1

जो मेरे लिए काम किया :) –

+0

आप नायक हैं! –

+0

वह वही था जो मुझे चाहिए था। अनदेखा करना बहुत आसान है। धन्यवाद! – gstjohn

0

मैं JohnG से सहमत में

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 

लागू करने के लिए, के अतिरिक्त चेतावनी के साथ भूल गया:

ध्यान दें कि यदि आप handleOpenURL: के अंदर कई मामलों है, तो आप फ़िल्टर कर सकते हैं के लिए:

if ([sourceApplication isEqualToString:@"com.facebook.facebook"] || 
    [sourceApplication isEqualToString:@"com.facebook.Facebook"]){ 
    //Do Stuff 
} 

यह अजीब है, लेकिन मैं कई उपकरणों sourceApplication "फेसबुक" और "फेसबुक" के रूप में वापस आ रहा पर दोहराने के लिए सक्षम था।

+1

[[स्रोत अनुप्रयोग लोअरकेसस्ट्रिंग] isEqualToString: @ "com.facebook.facebook"] नौकरी –

19

जबकि JohnG के जवाब सही है, कि विशेष रूप से प्रतिनिधि विधि अब deprecated किया गया है। सही प्रतिनिधि विधि is this उपयोग करने के लिए:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 

कि अपने आवेदन प्रतिनिधि में रखने मेरे लिए समस्या हल हो जाती। इसके बिना, आईओएस 6.0 मूल लॉगिन काम करेगा लेकिन फेसबुक ऐप लॉगिन असफल हो जाएगा।

+0

धन्यवाद @jzn करेगा, लेकिन मेरे मामले में आपके द्वारा उल्लिखित प्रतिनिधि विधि को नहीं कहा जा रहा है। कोई विचार? धन्यवाद। – dredful

+1

@ ड्रेडफुल कि कॉलबैक केवल फेसबुक ऐप/वेब व्यू फ़ॉलबैक लॉगिन के लिए उपयोग किया जाता है। यदि आप आईओएस 6 लॉगिन का उपयोग कर रहे हैं तो इसे कभी भी कॉल नहीं किया जाएगा, क्योंकि ऐप को पृष्ठभूमि में कभी नहीं रखा जाता है। आप किस तरह से लॉग इन कर रहे हैं? – jzn

+0

धन्यवाद @jzn। हमारा ऐप फेसबुक ऐप लॉगिन का उपयोग कर रहा था। यदि उपयोगकर्ता के पास फेसबुक स्थापित नहीं है, तो वेब दृश्य लॉन्च किया गया है और फिर यह आग लगती है। अजीब चीज: यदि उपयोगकर्ता आईओएस 6 सेटिंग्स लॉग इन फेसबुक है, तो एसडीके किसी अन्य परिदृश्य के बावजूद लॉग इन नहीं करेगा। मैं आज एसओ पर पोस्ट करूंगा। – dredful

0

अमेरिकन प्लान एसडीके 3.5 पर, आप इस के साथ टोकन को मार सकता है:

[[FBSessionTokenCachingStrategy defaultInstance] clearToken]; 
+0

और आप अपने फेसबुक डेवलपर खाते में प्रवेश कर सकते हैं और फिर इस पृष्ठ पर अपने टोकन मारने ... परीक्षण के लिए वास्तव में उपयोगी: [कड़ी] https://developers.facebook.com/tools/explorer/ ग्राफ़ एपीआई एक्सप्लोरर –

2

मैं एक ही समस्या थी। यदि उपयोगकर्ता को सिस्टम प्राथमिकता में कॉन्फ़िगर किया गया कोई फेसबुक खाता नहीं था, तो फेसबुक लॉगिन संवाद प्रकट हुआ और सबकुछ ठीक काम करता था। लेकिन अगर उपयोगकर्ता के पास डिवाइस में कॉन्फ़िगर किया गया खाता था तो मुझे हमेशा FBSessionStateClosedLoginFailed त्रुटि थी।

यह क्योंकि iOS 6 या अधिक से अधिक कोई तेजी से एप्लिकेशन-परिवर्तन होता है के लिए "देशी लॉग इन प्रवाह" में handleOpenURL:url कोई लेना देना नहीं है। तो आपका ऐप पृष्ठभूमि में कभी नहीं जाता है और यूआरएल रीडायरेक्शन की आवश्यकता नहीं है।

समस्या फेसबुक एप्लिकेशन को विन्यस्त हल किया गया था। आपको "मूल आईओएस लॉगिन" अनुभाग को सक्षम करने और अपने ऐप की बंडल आईडी डालने की आवश्यकता है। यदि आपका ऐप ऐप्पल स्टोर में पहले से नहीं है तो मुझे डर है कि आपको सैंडबॉक्स मोड को चालू करने की आवश्यकता है। एक बार जब आपका ऐप ऐप्पल स्टोर में प्रकाशित हो जाता है तो मुझे लगता है कि आपको सैंडबॉक्स मोड को बंद करने और फेसबुक कॉन्फ़िगरेशन में ऐप्पल स्टोर आईडी सेट करने की आवश्यकता है।

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