2012-10-03 14 views
6

पर काम नहीं करता है IOS6 मूल कार्यक्षमता के साथ-साथ अन्य फेसबुक कार्यक्षमता का उपयोग करने के लिए मैं अपने फेसबुक पुराने एसडीके 3.1 से नए फेसबुक एसडीके 3.1 में परिवर्तित कर रहा हूं, और मुझे कोई समस्या है यह सिम्युलेटर पर और शायद ही कभी डिवाइस पर होता है।फेसबुक लॉगिन संवाद आईओएस 6 सिम्युलेटर

जब मैं फेसबुक में लॉग इन करता हूं, ऐप पृष्ठभूमि के बजाय और सफारी या फेसबुक ऐप के माध्यम से प्रमाणीकरण करने के बजाय, मुझे लॉगिन के लिए मेरे ऐप के शीर्ष पर एक मोडल विंडो मिलती है (मुझे विश्वास है कि यह आईओएस 6 के साथ शुरू हुआ है, स्विचिंग से पहले भी फेसबुक एसडीके 3.0/3.1) के लिए। यह विंडो मुझे उपयोगकर्ता नाम और पासवर्ड दर्ज करने की अनुमति देती है, लेकिन जब मैं प्रमाणित करने के ऊपरी दाएं भाग में "ठीक है" पर क्लिक करने के लिए जाता हूं, तो कुछ भी नहीं होता है। एप्लिकेशन में कोई कॉलबैक नहीं होता है: openURL: स्रोत आवेदन: एनोटेशन: AppDelegate में।

FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:readPermissions defaultAudience:FBSessionDefaultAudienceNone urlSchemeSuffix:self.fbUrlSchemeSuffix tokenCacheStrategy:nil]; 

if(session.state == FBSessionStateCreated || session.state == FBSessionStateCreatedTokenLoaded) 
{ 
    [FBSession setActiveSession:session]; 

    // we open after the fact, in order to avoid overlapping close 
    // and open handler calls for blocks 
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
... 

पूरा करने के लिए कोड:

Facebook Login

को अपने साझा किए FacebookController कोड में (जो मैं कई परियोजनाओं के लिए उपयोग करें), मैं FBSession जब प्रति फेसबुक के नमूना कोड के रूप में अधिकृत करने के लिए प्रयास करने से आरंभ कर रहा हूँ हैंडलर को तब तक निष्पादित नहीं किया जाता जब तक कि मैं संवाद पर एक्स रद्द बटन पर क्लिक नहीं करता (जिस स्थिति में मुझे अपेक्षित त्रुटि मिलती है)।

मैं अपने आईओएस लक्ष्य गुणों (info.plist) में फेसबुक ऐपआईडी सेट कर रहा हूं और मेरे पास एफबी ### [url_scheme_suffix] के साथ यूआरएल योजनाएं भी स्थापित हैं।

मेरे कोड और फेसबुक नमूना कोड के बीच मेरा एकमात्र अंतर यह है कि मैं यूआरएल योजना प्रत्यय का उपयोग कर रहा हूं क्योंकि मेरे पास हमारे ऐप का निःशुल्क और भुगतान संस्करण है।

यदि ऐप लॉग इन करने के लिए सफारी का उपयोग करता है, तो यह कोड के अनुसार काम करता है। यदि यह फेसबुक ऐप पर तेजी से स्विच करता है, तो यह भी काम करता है। इसके अतिरिक्त, साझा फेसबुक ios6 खाता सेटिंग्स काम करते हैं। ऐप केवल तभी विफल रहता है जब यह ऐप मोडल में उपयोग करता है।

क्या किसी और को इसका सामना करना पड़ा है?

+0

क्या आपने अपने ऐप के साथ-साथ फेसबुक ऐप सेटिंग्स दोनों में बंडल आईडी निर्दिष्ट की है? –

+0

बंडल आईडी फेसबुक ऐप सेटिंग्स में सेट है (वास्तव में, दो सेट हैं, क्योंकि हमारे पास एप्लिकेशन के दो संस्करण हैं), और बंडल पहचानकर्ता ऐप प्लिस्ट में सेट है। –

+0

बस सुनिश्चित करें; आप वास्तव में 'nil'' ऐप आईडी के रूप में '-initWithAppID में अनुमति नहीं दे रहे हैं: अनुमतियां ...'? –

उत्तर

1

वही बात मेरे साथ हो रही है। यह केवल सिम्युलेटर (iphone5 4 इंच, ios6) पर होता है, इसलिए मुझे नहीं पता कि यह समस्या वास्तविक उपकरणों में मौजूद होगी या नहीं।

कुछ डिबगिंग सत्रों के बाद, मैंने पाया कि एफबीडीअलॉग का वेब व्यू: कन्स्टार्ट लॉडविथरक्वेट: नेविगेशन टाइप: विधि access_token ले जाने वाले यूआरएल को संसाधित नहीं कर रही थी। जब फेसबुक access_token पास करता है, तो इसका मतलब है कि आप प्रमाणित हैं। तो, मैंने सोचा, वहां कुछ याद आ रही थी।

fb122222222222222:

यहाँ यूआरएल के आकार है कि संसाधित नहीं किया जा रहा है // को अधिकृत/# ACCESS_TOKEN = ... & expires_in = 5,102,464 & कोड = ..

ध्यान दें कि यूआरएल योजना एक ही एफबी + एपीआई कुंजी है जिसे आपने अपने ऐप में Info.plist फ़ाइल में कॉन्फ़िगर किया है।

इस समस्या को ठीक करने के लिए मैंने किया है।नोट मैं यह भी कहा कि एक नया और कुछ-यदि शाखा, जिसमें मैं संवाद सफलता के मामले में फोन हम पहुँच टोकन है:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
navigationType:(UIWebViewNavigationType)navigationType { 
    NSURL* url = request.URL; 

    if ([url.scheme isEqualToString:@"fbconnect"]) { 
     if ([[url.resourceSpecifier substringToIndex:8] isEqualToString:@"//cancel"]) { 
      NSString * errorCode = [self getStringFromUrl:[url absoluteString] needle:@"error_code="]; 
      NSString * errorStr = [self getStringFromUrl:[url absoluteString] needle:@"error_msg="]; 
      if (errorCode) { 
       NSDictionary * errorData = [NSDictionary dictionaryWithObject:errorStr forKey:@"error_msg"]; 
       NSError * error = [NSError errorWithDomain:@"facebookErrDomain" 
                 code:[errorCode intValue] 
                userInfo:errorData]; 
       [self dismissWithError:error animated:YES]; 
      } else { 
       [self dialogDidCancel:url]; 
      } 
     } else { 
      if (_frictionlessSettings.enabled) { 
       [self dialogSuccessHandleFrictionlessResponses:url]; 
      } 
      [self dialogDidSucceed:url]; 
     } 
     return NO; 
    } 
//THIS IS WHAT I'VE ADDED>>>> 
     else if ([[[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleURLTypes"] firstObject] objectForKey:@"CFBundleURLSchemes"] firstObject] isEqual:url.scheme]) 
     { 
      [self dialogDidSucceed:url]; 
      return NO; 
     } 
//<<<<< 
    else if ([_loadingURL isEqual:url]) { 
     return YES; 
    } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     if ([_delegate respondsToSelector:@selector(dialog:shouldOpenURLInExternalBrowser:)]) { 
      if (![_delegate dialog:self shouldOpenURLInExternalBrowser:url]) { 
       return NO; 
      } 
     } 

     [[UIApplication sharedApplication] openURL:request.URL]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

मैं उल्लेख है कि मैं सभी अमेरिकन प्लान एसडीके दिशा निर्देशों (3.1) और अनुसरण कर रही हूं लायक है मैंने src कोड में कोई और बदलाव किया है।

उन परिवर्तनों के साथ, एफबी लॉगिन प्रक्रिया अपेक्षित के रूप में काम करती है।

मुझे आशा है कि इससे मदद मिलती है!

+0

क्या आपने इस बारे में फेसबुक पर पुल अनुरोध या बग रिपोर्ट खोला है? – yonix

+0

और धन्यवाद ... यह मेरे लिए पूरी तरह से काम करता है :) – yonix

+0

नहीं, मैंने एक बग रिपोर्ट नहीं खोली है। अगर आप – Lio