2013-01-01 6 views
6

अधिकृत किया है, मैंने अपने ऐप को फेसबुक एसडीके 2 से 3.1 तक अपग्रेड कर दिया है।फेसबुक आईओएस खो गया सत्र लगता है जब आप ठीक से क्लिक करने के बाद ऐप पर वापस आते हैं, आपने पहले ही एप

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

मैं पहले ही लॉगिन कर चुका हूं। और उसके बाद, जब भी मैं पोस्ट बटन पर क्लिक करता हूं, ऐप के बारे में पृष्ठ पहले से ही अधिकृत है और आपको पूछता है कि ठीक क्लिक करके जारी रखना जारी रखना है या नहीं। ठीक क्लिक करने के बाद, ऐप समाप्त हो जाता है और शुरुआत से लॉन्च हो जाता है। हर बार जब मैं पोस्ट बटन पर क्लिक करता हूं, तो यह वही पृष्ठ फिर से दिखाई देता है। ऐसा लगता है कि यह वैध सत्र नहीं ढूंढ सकता है या टोकन खो गया है।

मैंने सिम्युलेटर और डिवाइस पर इसका परीक्षण किया है। वही बात होती है। तैनाती लक्ष्य आईओएस 5.1 है।

एकमात्र पैरामीटर जो मैंने दर्ज नहीं किया है वह आईफोन ऐप स्टोर आईडी है। क्या यह उपर्युक्त व्यवहार को प्रभावित करेगा?

मैंने पहले से कई बार कोशिश की है और समाधान नहीं मिला।

किसी भी मदद की सराहना की जाती है।

धन्यवाद!

AOBS


4 जनवरी को संपादित:

मुझे पता चला है कि हर बार openSessionWithAllowLoginUI कहा जाता है। राज्य FBSessionStateClosedLoginFailed वापस आ गया है। लॉगिन के साथ एक समस्या है। लेकिन उपयोगकर्ता पहले ही लॉगिन कर चुका है क्योंकि पहले ही अधिकृत पृष्ठ दिखाई देता है।

कारण है एप्लिकेशन OpenTessonWithAllowLoginUI के बाद सही निष्पादित करता है। क्या कोई इसे स्पष्ट कर सकता है?


appDelegate.h में, मैं आयात AppDelegate.m में FacebookSDK/FacebookSDK.h और, निम्नलिखित कार्यान्वित किया जाता है:

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

-(void)applicationDidBecomeActive:(UIApplication *)application { 
[FBSession.activeSession handleDidBecomeActive]; 
} 

-(void)applicationWillTerminate:(UIApplication *)application { 
[FBSession.activeSession close]; 
} 

mainViewController एक बहु दृश्य नियंत्रक कि स्विच जाएगा महत्वपूर्ण व्यक्ति।

मैंने फेसबुक लॉगिन/लॉगआउट को संभालने के लिए एक कक्षा एफबी हैंडलर लागू किया है। FBHandler.h #import "Facebook.h" शामिल हैं और FBHandler एक वर्ग है कि

-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error { 
    switch(state) { 
    case FBSessionStateOpen: 
     break; 
    case FBSessionStateClosed: 
    case FBSessionStateClosedLoginFailed: 
     [FBSession.activeSession closeAndClearTokenInformation]; 
    default: 
     break; 
    } 

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

    // If there is an error, display the alert view. I have skipped this code. 
} 

-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 
    return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
} 

महत्वपूर्ण व्यक्ति में से एक होता है - RecordsScreen.xib फेसबुक लॉगिन/लॉगआउट बटन होते हैं। ,

fbHandler = [[FBHandler alloc] init]; 
[fbHandler openSessionWithAllowLoginUI:NO]; 

// Also, we will listen to FBSessionStateChangedNotification in viewDidLoad. Code is skipped here. 

// The implementation of sessionStateChanged in RecordsScreen: 
-(void)sessionStateChanged:(NSNotification *)notification { 
    if (FBSession.activeSession.isOpen) { 
     if (self.facebook == nil) { 
      self.facebook = [[Facebook alloc]initWithAppId:FBSession.activeSession.appID andDelegate:nil]; 
      self.facebook.accessToken = FBSession.activeSession.accessToken; 
      self.facebook.expirationDate = FBSession.activeSession.expirationDate; 
     } 
    } else { 
     self.facebook = nil; 
    } 
} 

RecordsScreen.m में उपयोगकर्ता लॉगिन क्लिक करता है तो: RecordsScreen.m (एक जगह है जहाँ उपयोगकर्ता उसकी/उसके स्कोर देख सकते हैं और के लिए लॉग इन या फेसबुक से लॉगआउट कर सकते हैं) में, निम्न viewDidLoad में जोड़ा जाता है बटन में,

if (!FBSession.activeSession.isOpen) { 
    // Login to Facebook. 
    [fbHandler openSessionWithAllowLoginUI:YES]; 
} else { 
    // If user is login, post to wall. 
    [self postScoreToWall]; 
} 
+0

इस – Harikrishnan

+0

के लिए ऐप स्टोर आईडी की कोई आवश्यकता नहीं है क्या यह फेसबुक एसडीके 2 में ठीक काम कर रहा है? – Harikrishnan

+1

हां, यह एसडीके 2 में ठीक काम कर रहा था। कोड अलग था। – aobs

उत्तर

4

मुझे समस्या मिली। प्लेस्ट में, "पृष्ठभूमि पृष्ठभूमि में नहीं चलती है" को YES पर सेट किया गया था। समस्या हल करने के लिए कोई समस्या नहीं है।

2

कोड में जो आप दिखा रहे हैं केवल आपको अपने सत्र के लिए पढ़ने की अनुमति का मूल सेट प्राप्त होता है। उपयुक्त अनुमतियों को पारित करने के लिए कम से कम reauthorizeWithPublishPermissions: पर कॉल करने की आवश्यकता है।

मुझे बस एक ही समस्या थी, मैंने लॉगिन करने के दौरान दो चीजों को बदलकर इसे हल किया, मैं दो कदम अनुमति एस्केलेशन विधि का उपयोग नहीं कर रहा हूं जो फेसबुक सुझाता है लेकिन मैं openActiveSessionWithPublishPermissions का उपयोग करके लॉगिन पर आवश्यक अनुमतियां प्राप्त करने का प्रयास करता हूं ।

आपको यह सुनिश्चित करने की भी आवश्यकता है कि handleDidBecomeActive: को फेसबुक लॉगिन प्रक्रिया के अंत में एसडीके पर एक और कॉल करने का प्रयास करने से पहले कॉल किया जाए। ऐसा नहीं हो सकता है यदि आपके पास इस प्रक्रिया के विभिन्न चरणों को निष्पादित करने वाले ब्लॉक की एक श्रृंखला है।

मैंने इस एसडीके के पुराने संस्करण के साथ काम नहीं किया लेकिन यह बहुत अधिक अंतर्ज्ञानी लग रहा था।

+0

उपयोगकर्ता के लॉगिन के बाद मैं पुन: प्राधिकरण का उपयोग करूंगा, पोस्ट बटन पर क्लिक करें। लेकिन मैं आपके सुझाव का प्रयास करूंगा और देख सकता हूं कि यह समस्या का समाधान करेगा या नहीं। – aobs

+0

बस ऐप का परीक्षण करने के लिए अनुमति परिवर्तन के साथ ऐप का परीक्षण करेंऑक्टिव सत्र WithPublishPermissions। वही समस्या होती है। – aobs

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