使用以下授权方法进行身份验证时,我使用startWithGraphPath和startForMeWithCompletionHandler获取com.facebook.sdk错误5,但不得使用requestWithGraphPath。我成功获得令牌(在didLogin中打印)并通过requestwithGraphPath获取我想要的任何内容,但我无法使用其他方法。如果有人遇到过相同的问题或类似的事情,或者有任何想法,如果你分享,我会很高兴。
由于
方法:
NSArray *permissions = [[NSArray alloc] initWithObjects: @"user_likes",@"offline_access",@"read_stream",@"publish_stream",nil];
[_facebook authorize:permissions];
答案 0 :(得分:10)
startWithGraphPath和其他start *方法可能不会启动活动会话。这些方法依赖于正在设置的活动会话。参见:
“请求使用[FBSession activeSession]表示的活动会话。”
所以你必须做这样的事情:
[FBSession setActiveSession:session];
会话是您之前设置的FBSession。
答案 1 :(得分:2)
以下解决方案为我工作。但是,如果您要存储永久访问令牌,则需要确保用户未删除应用程序权限,否则会出错。您可以使用requestWithGraphPath检查 - > “我/权限”。
应用程序初始化函数(例如:_didFinishLaunchingWithOptions /或您在哪里初始化您的Facebook对象,其中需要同时为fbsessiondelegate )
...
NSArray* permissions = [[NSArray alloc] initWithObjects:@"user_likes",@"offline_access", nil];
FBSession*oursession = [[FBSession alloc] initWithPermissions:permissions];
...
FBDidLogin功能:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
示例图api请求函数:
NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
NSString *key = [userDefaults stringForKey:@"FBAccessTokenKey"];
FBRequest* ourcon = [[FBRequest alloc] initWithSession:oursession graphPath:@"me/likes" parameters:params HTTPMethod:@"GET"];
[ourcon startWithCompletionHandler: ^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error){
if(error)
{
//NSLog(error.code);
return;
}
NSArray* collection = (NSArray*)[result data];
NSLog(@"You have %d like", [collection count]);
NSDictionary* name = [collection objectAtIndex:14];
NSLog(@"Like Name: %@", [name objectForKey:@"name"]);
}];