我正在尝试处理权限错误,基本上我从www.facebook.com应用程序设置中删除了该应用程序.在应用程序中我使用此方法登录:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
Run Code Online (Sandbox Code Playgroud)
出于某种原因,令牌被缓存,应用程序没有意识到我从Web上删除了权限.因此,在openActiveSessionWithReadPermissions之后,会话总是打开,然后我发出请求,然后我得到下一个响应:(不是在错误对象中,而是在响应中):
验证访问令牌时出错:用户XXX未授权应用程序YYY.
所以我处理它,因为令牌无效我这样做:
[[FBSession activeSession] closeAndClearTokenInformation];
Run Code Online (Sandbox Code Playgroud)
并再次尝试登录,但同样的问题.
似乎如果用户从网络中删除权限,那么聚会永远结束了吗?还有什么回头路?
使用新的Facebook SDK 3.1和iOS 6,有2种(实际上3种)发布方式.
(似乎新趋势是有更多的选择让它变得更简单?)OMG !!
这是一个:
SLComposeViewController *fbPost = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbPost addURL:[NSURL URLWithString:href]];
[self presentViewController:fbPost animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这是使用原生对话框的另一种方式:
[FBNativeDialogs presentShareDialogModallyFrom:self
initialText: nil
image: nil
url: [NSURL URLWithString:href]
handler:^(FBNativeDialogResult result, NSError *error) {
if (error) {
}
else
{
switch (result) {
case FBNativeDialogResultSucceeded:
break;
case FBNativeDialogResultCancelled:
break;
case FBNativeDialogResultError:
break;
}
}
}];
Run Code Online (Sandbox Code Playgroud)
我们开发人员认为这很酷,因为我们为用户提供了一个很好的功能,也因为我们的应用名称出现在帖子中,可以对应用进行一些推广.
有趣的是,最新的实现不允许指定应用程序名称是发布,名称出现在'via'之后.
我尝试过使用SLRequest:
ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
(options)[@"ACFacebookAppIdKey"] = kFacebookAppID;
(options)[@"ACFacebookPermissionsKey"] = …Run Code Online (Sandbox Code Playgroud)