Sandbox Mode=on
Bundle ID =same FBid=Ok ..Anything else does not matter
-(void) askForPublishPermission
{ BOOL isSessionActive = [self isFacebookSessionActive];
//BOOL useUI = !isSessionActive;
//useUI = YES;
BOOL publishPermissionAvailable = NO;
if (isSessionActive)
{
NSArray* validPermission = [[FBSession activeSession] permissions];
for (int i=0; i<[validPermission count]; i++)
{
NSObject* permission = [validPermission objectAtIndex:i];
if ([permission isKindOfClass:[NSString class]])
{
NSString* validPermission = (NSString*)permission;
//NSLog(@"Valid Permissions = %@", validPermission);
if ([validPermission isEqualToString:@"publish_actions"])
{
publishPermissionAvailable = YES;
break;
}
}
}
}
if (publishPermissionAvailable == YES)
{
//NSLog(@"------------------ CALL AT TWO --------------");
//NSLog(@"Login Success");
}
else // Request for publish permission.
{
NSArray* permissionArray = [NSArray arrayWithObjects:
@"publish_actions",nil];
[FBSession openActiveSessionWithPublishPermissions:permissionArray
defaultAudience:FBSessionDefaultAudienceEveryone
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
}
和
-(void) askForPublishPermission
{
BOOL isSessionActive = [self isFacebookSessionActive];
//BOOL useUI = !isSessionActive;
//useUI = YES;
BOOL publishPermissionAvailable = NO;
if (isSessionActive)
{
NSArray* validPermission = [[FBSession activeSession] permissions];
for (int i=0; i<[validPermission count]; i++)
{
NSObject* permission = [validPermission objectAtIndex:i];
if ([permission isKindOfClass:[NSString class]])
{
NSString* validPermission = (NSString*)permission;
//NSLog(@"Valid Permissions = %@", validPermission);
if ([validPermission isEqualToString:@"publish_actions"])
{
publishPermissionAvailable = YES;
break;
}
}
}
}
if (publishPermissionAvailable == YES)
{
//NSLog(@"------------------ CALL AT TWO --------------");
//NSLog(@"Login Success");
}
else // Request for publish permission.
{
NSArray* permissionArray = [NSArray arrayWithObjects:
@"publish_actions",nil];
[FBSession openActiveSessionWithPublishPermissions:permissionArray
defaultAudience:FBSessionDefaultAudienceEveryone
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
}
但..没有登录..
错误代码见下文:
Error = Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.){com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginCancelled, com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The app must ask for a basic read permission like email at install time."
我花了几个月这个问题..请帮助我
答案 0 :(得分:0)
您的错误消息显示:
应用程序必须在安装时请求基本的读取权限,例如电子邮件。
来自the docs:
当有人使用Facebook登录连接应用时,该应用可以访问他们的公开个人资料和朋友列表,这些信息对每个人都是可见的。要创建此基本连接,应用必须始终通过要求
basic_info
权限请求访问某人的基本个人资料信息。
尝试将basic_info
添加到permissionArray
数组。如果这不起作用,请尝试添加email
。
答案 1 :(得分:0)
我换了:
[FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"] defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:stateHandler];
与
[FBSession openActiveSessionWithPublishPermissions:@[@"basic_info", @"publish_actions", @"email"] defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:stateHandler];
现在它正在工作
(权限令很重要,basic_info
必须处于第一位置)