2015-04-03 8 views
11

के माध्यम से लॉग इन होने के बावजूद पहुंचने के बावजूद मेरा फेसबुक एक्सेस टोकन इस तथ्य के बावजूद शून्य है कि बटन दिखाता है कि मैं लॉग इन हूं। कोई भी जानता है कि यह क्यों होगा?आईओएस फेसबुक एसडीके v4.x एक्सेस टोकन नल FBSDKLoginButton

RootViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self->login_button = [[FBSDKLoginButton alloc] init]; 
    self->login_button.center = self.view.center; 
    [self.view addSubview:self->login_button]; 

    FBSDKAccessToken* access_token =[FBSDKAccessToken currentAccessToken]; 
    NSLog(@"Access Token, %@",access_token); 
} 

से

ApplicationDelegate.m से

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    [self.window setRootViewController:[[RootViewController alloc] init]]; 

    [self.window makeKeyAndVisible]; 

    [self.window setBackgroundColor:[UIColor purpleColor]]; 
    [FBSDKLoginButton class]; 
    return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

भी मेरी -ObjC लिंकर झंडा

+0

मैं एक ही समस्या का सामना कर रहा है। मुझे लगता है कि यह FBSDKLoginManager विधि बनाम लॉगिंग के FBSDKLogin बटन विधि का उपयोग करने के साथ कुछ करने के लिए हो सकता है। –

+0

[FBSDKAplicationDelegate SharedInstance] एप्लिकेशन के बाद आपको FBSDKAccessToken currentAccessToken को कॉल करना होगा: एप्लिकेशन किया गयाफिशिश लॉन्चिंगविथऑप्शन: लॉन्चऑप्शन]; फिर एक वैध टोकन दिखाई देगा। –

उत्तर

-1

आप tokenString बजाय का उपयोग करना चाहिए सेट किया गया है, इस तरह:

FBSDKAccessToken * access_token = [FBSDKAccessToken currentAccessToken] .tokenSt अंगूठी; एनएसएलओजी (@ "एक्सेस टोकन,% @", access_token);

1

मुझे कोई समस्या है जहां मुझे एक्सेस टोकन नहीं मिल सका क्योंकि मैं इसे return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; से पहले कॉल कर रहा हूं। मुझे यह देखने के लिए एक्सेस टोकन की जांच करने की आवश्यकता है कि उपयोगकर्ता लॉग इन है या नहीं, यह तय करने के लिए कि मेरा रूट व्यू कंट्रोलर कौन सा होना चाहिए। क्या मैंने किया था मैं द्वारा आवेदन didFinishLaunchingWithOptions में मैन्युअल रूप से कैश से पहुंच टोकन प्राप्त करने की कोशिश की थी:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    FBSDKProfile *cachedProfile = [FBSDKProfile fetchCachedProfile]; 
    [FBSDKProfile setCurrentProfile:cachedProfile]; 

    FBSDKAccessToken *cachedToken = [[FBSDKSettings accessTokenCache] fetchAccessToken]; 
    NSLog(@"Cached Token: %@", cachedToken.tokenString); 

    if (cachedToken) { 
     //User is logged in, do logic here. 
    } 

    return [[FBSDKApplicationDelegate sharedInstance] application:application 
           didFinishLaunchingWithOptions:launchOptions]; 
} 

आप FBSDKApplicationDelegate.m में - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions के कार्यान्वयन की जाँच

अद्यतन

द्वारा इस विधि को देख सकते हैं

यह अब और काम नहीं कर रहा है। मुझे यकीन नहीं है क्यों। लेकिन ऐसा लगता है कि fetchCachedProfile और accessTokenCache विधियों को आंतरिक बना दिया गया है। मैं अपने कोड में अब इन विधियों तक नहीं पहुंच सका क्योंकि यह मुझे एक त्रुटि देता है।

11

एफबीएसडीके अनुप्रयोग डिलीगेट को पहले कैश्ड टोकन को हल करने की आवश्यकता है। चूंकि आप तुरंत रूट व्यू कंट्रोलर सेट कर रहे हैं, जो आपके दृश्य को FBSDKAplicationDelegate से पहले डिडलोड लोड करता है। इसके बजाय, आप FBSDKApplicationDelegate ऊपर ले जाएँ कर सकते हैं:

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

    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application 
                    openURL:url 
                 sourceApplication:sourceApplication 
                   annotation:annotation]; 

    return handled; 
} 
4

मैं आज एक ही मुद्दा मिल गया, सिर्फ इसलिए कि मैं एक कदम याद किया ।

में अपने AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // ... 

    // add observer BEFORE FBSDKApplicationDelegate's - application:didFinishLaunchingWithOptions: returns 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(fbAccessTokenDidChange:) 
               name:FBSDKAccessTokenDidChangeNotification 
               object:nil]; 

    return [[FBSDKApplicationDelegate sharedInstance] application: application  didFinishLaunchingWithOptions: launchOptions]; 
} 

- (void)fbAccessTokenDidChange:(NSNotification*)notification 
{ 
    if ([notification.name isEqualToString:FBSDKAccessTokenDidChangeNotification]) { 
     if ([FBSDKAccessToken currentAccessToken]) { 
      // token is ready to be used in the app at this point 
     } 
    } 
} 
0

आप अपने ViewController के कोड में FBSDKAccessTokenDidChangeNotification अधिसूचना के लिए इंतजार चारों ओर तर्क बना सकते हैं:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    [FBSDKLoginButton class]; 
    BOOL r = [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    [self.window setRootViewController:[[RootViewController alloc] init]]; 

    [self.window makeKeyAndVisible]; 

    [self.window setBackgroundColor:[UIColor purpleColor]]; 


    return r; 
} 
0

यह मेरे लिए भी हुआ है, "फेसबुक के साथ लॉगिन करें" बटन काम की उम्मीद के रूप में, मैं अनुमतियों के लिए कहा जा रहा था, उन्हें अनुमति, application:openURL:... प्रतिनिधि विधि बुलाया जा रहा था एक यूआरएल के साथ जो वैध लग रहा था, फिर भी accessToken संपत्ति शून्य बनी रही।

मेरे मामले में समस्या तथ्य यह है कि किसी भी तरह Shared Keychain आवेदन हकों से निकाल दिया गया था, इस प्रकार फेसबुक एसडीके-चेन में टोकन को बचाने के लिए सक्षम नहीं था। क्षमता को सक्षम करने से समस्या हल हो गई।

अजीब बात यह है कि यह एक मूक त्रुटि थी, तो यह शुरुआत क्यों पहुँच टोकन सेट नहीं किया जा रहा था से स्पष्ट नहीं था ...

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