gpt4 book ai didi

iphone - Facebook iOS SDK : isSessionValid returns no, 但当我实际登录时

转载 作者:行者123 更新时间:2023-11-29 04:29:01 25 4
gpt4 key购买 nike

我正在尝试使用 Facebook SDK 从我的应用程序登录 FB。我遵循了本教程 https://developers.facebook.com/docs/mobile/ios/build/#implementsso虔诚地!

我的问题这就是我所做的(我的 iPhone 中没有安装 Facebook 应用程序)1. 我第一次从“iPhone”中的应用程序登录 Facebook 时,它打开了 Safari。我登录并授予我的应用程序权限。2. 我从 iPhone 中删除了我的应用程序并重新启动了我的 iPhone。3. 现在,当我尝试再次从我的应用程序登录 FB 时,isSessionValid 调用返回“no”,并且我尝试打印访问 token ,它返回 null。这可以。但是应用程序在执行 isSessionValid 时,然后调用(如教程中所示) [thisAppDelegate.facebook 授权:nil];它会在 iPhone 中打开 Safari 并带我到一个 Facebook 页面,上面显示我已登录(为什么 isSessionValid 返回 null?好吧,假设这个应用程序与 FB 的 session 在我登录的情况下结束了)并且这个应用程序是已经授权了。我在下面的屏幕中单击“确定”,应用程序崩溃了。

enter image description here

fbLogin 调用完成后,我收到 EXC_BAD_ACCESS(代码 1)。这似乎发生在 FBURLConnection.m 的第 2 行方法中(“for”循环):

- (BOOL)isCDNURL:(NSURL *)url
{
NSString* urlHost = url.host;
for (NSString* host in _cdnHosts) {
if ([urlHost hasSuffix:host]) {
return YES;
}
}

return NO;
}

打印“urlHost”的值会得到“graph.facebook.com”的值。

有人可以帮忙吗?

代码片段

AppDelegate.h

#import <UIKit/UIKit.h>
#import "FBConnect.h"

@interface com_AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate> {

Facebook *facebook;
}

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) Facebook *facebook;

@end

我的AppDelegate.m

...
@synthesize facebook;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
facebook = [[Facebook alloc] initWithAppId:kFBAppId andDelegate:self];


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSLog(@"AppDelegate.handleOpenURL");
return [facebook handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
NSLog(@"AppDelegate.openURL");
return [facebook handleOpenURL:url];
}

- (void)fbDidLogin {

NSLog(@"AppDelegate.fbDidLogin");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
NSLog(@"Set the facebook accessToken to '%@' & expiry to '%@'", [facebook accessToken], [facebook expirationDate]);
}
...

我有一个 FBTalker 类,它将打开 FB 连接。

来自FBTalker.h

...@interface ViewController_FBTalker : UIViewController { id 应用程序委托(delegate);}@property(非原子)com_AppDelegate *thisAppDelegate;...

FBTalker.m

...
-(void) initializeView {

appDelegate = [[UIApplication sharedApplication] delegate];
thisAppDelegate = (com_AppDelegate *) appDelegate;

/*
Check for a valid session and if it is not valid call the authorize method which will both log the user in and prompt the user to authorize the app
*/
NSLog(@"thisAppDelegate.facebook: access token - %@", [thisAppDelegate.facebook accessToken]);
NSLog(@"thisAppDelegate.facebook: exp date - %@", [thisAppDelegate.facebook expirationDate]);

if (![thisAppDelegate.facebook isSessionValid]) {
[thisAppDelegate.facebook authorize:nil];
NSLog(@"No valid FB Session yet");
// Checks if the App has permission to publish to the user stream
/* NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
[thisAppDelegate.facebook authorize:permissions];
*/
} else {
NSLog(@"Valid FB Session exists");
}

...

环境代码 4.3.3Facebook iOS SDK(最新来自 Github)https://github.com/facebook/facebook-ios-sdk/iOS 5iPhone 4(未安装 Facebook 应用程序)

最佳答案

我也曾经遇到过类似的问题。这是因为,通常在登录时,访问 token 会保存在 UIWebView 的缓存存储中。如果您想一次又一次登录,您需要从 WebView 中删除缓存。您可以使用此方法单独清除 facebook 域的缓存。

- (void) clearFBCache 
{
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {

if([[cookie domain] isEqualToString:@"facebook"]) {

[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
}

这个方法对我有用。希望这对您也有帮助。

关于iphone - Facebook iOS SDK : isSessionValid returns no, 但当我实际登录时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com