相关疑难解决方法(0)

使用[FBSession openActiveSessionWithPublishPermissions:..]时出错

我正在更新应用程序以使用最新的Facebook SDK以获得对iOS6原生Facebook支持的访问权限.它目前使用的是相当旧版本的Facebook SDK.

该应用程序需要Facebook的"publish_actions"权限才能与Facebook进行唯一的操作.

我最初认为我可以使用[FBSession openActiveSessionWithPublishPermissions: ...]但是当用户在iOS6设置中配置了Facebook时,这在iOS6上失败了.由于这一要求,它失败了,来自Facebook文档:

请注意,要使用iOS 6本机身份验证,应用程序需要更改用户请求权限的方式 - 应用程序必须将其读取和写入权限请求分开.面向iOS的Facebook SDK支持这些功能,并帮助开发人员使用它们构建适用于多个iOS版本和设备配置的应用程序.

这是一个大型的PITA,IMO.我们的偏好是提示用户一次获得许可并完成它,但每个Apple/Facebook的"新"理想是在需要但尚未授予时在上下文中提示特定权限.

目前的计划是保留iOS5用户和未在"设置"中配置Facebook的iOS6用户的旧行为.并符合使用本机访问的iOS6用户的新双提示.

问题是,最好的方法是什么? 我应该如何检测Facebook SDK是否会选择iOS6本机登录与后备机制?我忽略了一些明显的东西吗

编辑:

杰拉尔德威廉姆让我走上正轨.他的解决方案几乎可以工作,除了在iOS5中没有ACAccountTypeIdentifierFacebook.此外,如果用户阻止设置中的FB访问应用程序,则accountsWithAccountType调用将返回一个空数组.

可以通过询问帐户类型匹配标识符"com.apple.facebook"来解决第一个问题 - 这将在iOS5上返回nil,在iOS6上返回真实帐户类型对象.

但第二个问题是无法解决的.我的新计划是始终在iOS6上以只读权限打开初始会话,并在上下文中根据需要提示发布权限.在iOS5上,我仍然会打开初始会话,指定所需的publish_actions权限.这是代码:

ACAccountStore* as = [[ACAccountStore new] autorelease]; 
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"]; 
if ( at != nil ) {
    // iOS6+, call  [FBSession openActiveSessionWithReadPermissions: ...]

} else  {
    // iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...] 
}
Run Code Online (Sandbox Code Playgroud)

ios facebook-ios-sdk

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

facebook-ios-sdk ×1

ios ×1