ios – 在通过Accounts框架请求访问Facebook时是否可以获得oauth令牌?

我需要在服务器后台进行一些API调用,这就是我需要oauth令牌的原因.

使用ACAccountCredential的oauthToken方法,它返回null.我的问题是,有可能以某种方式获得oauth令牌吗?

例如Instagram就是这样做的.它们通过Accounts框架进行身份验证,并将令牌发送到他们执行所有图形API调用的服务器.

谢谢

最佳答案 (编辑解决@ 0xSina的评论)

是.我知道您已尝试访问Facebook ACAccount对象的ACAccountCredential的oauthToken属性,并且它返回nil.也就是说,这是做到这一点的方式,并且当一切设置正确时它不会返回nil.

我创建了一个测试项目来证明这一点,相关代码如下.要检查的一些事项:

1)在您的Facebook应用程序信息页面上,确保您在Native iOS App部分中设置了包ID.

2)(非常明显)确保您在iOS设置中设置了Facebook帐户.

3)如果你不能让你的主项目工作,像我一样尝试一个空的测试项目,看看是否有效.您必须记住将测试项目的bundleID设置为与您在Facebook设置页面上输入的内容相匹配!

这是带有一些断言的代码,如果出现故障则通知您:

- (void) viewDidAppear:(BOOL)animated
{
    ACAccountStore* as = [ACAccountStore new];

    ACAccountType* fbat = [as accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];
    NSAssert( fbat != nil, @"oops, can't find account-type for facebook!");

    [as requestAccessToAccountsWithType: fbat

                                options: @{ ACFacebookAppIdKey : @"99999999999", // your FB appid here!
                                            ACFacebookPermissionsKey : @[ @"email" ] }

                             completion: ^(BOOL granted, NSError *error) {

                                 NSAssert( granted && error==nil, @"oops, access not granted!");

                                 if ( granted )
                                 {
                                     NSArray* accounts = [as accountsWithAccountType: fbat];
                                     NSAssert( accounts.count > 0, @"oops, no accounts??" );

                                     ACAccount* fbaccount = [accounts lastObject];

                                     ACAccountCredential* ac = [fbaccount credential];
                                     NSAssert( ac != nil, @"oops, no credential??" );

                                     NSString* token = [ac oauthToken];
                                     NSAssert( token.length > 0, @"oops, no credential??" );

                                     NSLog( @"token=%@", token );
                                 }
                             }];


}

我认为,一个常见问题是将ACFacebookPermissionsKey格式化为字符串而不是字符串数组.或者完全放弃它,因为文档说它是可选的(它不是.)

而且,这是我测试的输出(略有改动,所以我不在这里发布真正的令牌)

2013-07-26 16:54:23.699 testfb[26870:1303] token=CAAAAEZBYxezsBAK6OK9YPQIfA0GjiG7rn2XjdZBC6lZCpfAAAocr2cyEnmne9eMh59ZA4UabQyZAsdQMu0gMruxEJXJI1tFfBVTmLqNpRK31GPQvr3rXRAr50HUXI37iS46gPwXwZAroUHT7WqZCza6HcV6L35gVThBcOttWNxozj1df70XluEreM14nucSmvimjVGu5i4ZBZAUrSYLsvO
点赞