iOS 6的Facebook SDK要求你在发布权限之前请求读取权限,并强烈建议你只在上下文中请求发布权限。然而,我没有使用FB登录登录或任何与阅读权限相关的内容,我只是希望人们能够在应用程序中发布行为。
我想简单地请求读取权限,然后立即在本机权限对话框中请求发布权限。我发现这样做的唯一方法是通过修改FBLoginView(这是与应用程序打包的登录视图),但我想做我自己的按钮,如果用户登录,帖子到FB。
这就是我现在的调用
[appDelegate openSessionWithAllowLoginUI:YES];
在委托
中调用这个- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"email",
@"user_likes",
nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
我如何修改该函数或立即调用"openActiveSessionwithPublishPermissions"函数后读取权限被授权?
您可以在openActiveSessionWithReadPermissions
的完成处理程序中调用openActiveSessionwithPublishPermissions
。紧跟[self sessionStateChanged:session
state:state
error:error];
更新:
例如。我通过以下方式完成了这个任务:
我在一个类中创建了这个方法,我用它来管理所有的facebook交易:
- (void)attemptToConnectToFacebookForFirstTime:(void (^)(bool granted))completion
{
ACAccountType *facebookAccountType = [accountStore
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @{
ACFacebookAppIdKey: @"000000000000",
ACFacebookPermissionsKey: @[@"email"],
ACFacebookAudienceKey: ACFacebookAudienceEveryone
};
[accountStore requestAccessToAccountsWithType:facebookAccountType
options:options
completion:^(BOOL granted, NSError *e)
{
// if you gotta do something here, then do it.
// and then call the completion
completion(granted);
}];
}
然后创建了这个:
- (void)connectToFacebook:(void (^)(bool granted))completion
{
ACAccountType *facebookAccountType = [accountStore
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @{
ACFacebookAppIdKey: @"0000000000000",
ACFacebookPermissionsKey: @[@"publish_stream",
@"publish_actions"],
ACFacebookAudienceKey: ACFacebookAudienceEveryone
};
[accountStore requestAccessToAccountsWithType:facebookAccountType
options:options
completion:^(BOOL granted, NSError *e)
{
// do what you gotta do, and call completion
completion();
}];
}
,然后这样调用它们:
[[FacebookManager sharedManager] attemptToConnectToFacebookForFirstTime:^(bool granted)
{
if (granted)
{
[[FacebookManager sharedManager] connectToFacebook:^(bool granted)
{
// do something
}
}
}
我的版本没有使用facebook SDK,但想法是一样的。