首页 文章

如何使用facebook sdk在ios中创建facebook测试用户

提问于
浏览
0

我开发了一个需要facebook朋友的电子邮件地址的iphone应用程序 . 假设您的朋友拥有该应用并已授予电子邮件和offline_access权限,那么我相信可以使用:

[facebook requestWithGraphPath:@"FRIEND_ID?fields=id,email" andDelegate:self];

获取他们的电子邮件地址出于测试目的和提交给苹果,如何使用facebook sdk在ios app中创建facebook测试用户? Facebook提供了创建测试用户的能力(http://developers.facebook.com/docs/test_users/),但我无法理解如何使用他们的sdk / graph api在我的ios应用程序中使用本网站上的信息 .

1 回答

  • 0

    好的,我也一直在研究这个,这就是我想出来的 .

    根据文档,应该能够通过调用图API来创建测试用户,如下所示:

    NSString *urlString = [NSString stringWithFormat:@"%@/accounts/test-users", kAppId];
    [facebook requestWithGraphPath:urlString andParams:params andHttpMethod:@"POST" andDelegate:self];
    

    其中 params 是一个NSMutableDictionary,包含部分或全部参数,详见https://developers.facebook.com/docs/test_users/ .

    但是,我发现API需要app访问令牌来创建测试用户,SDK文件 Facebook.m 中的方法 requestWithGraphPath:andParams:andHttpMethod:andDelegate: 实际上发送了一个用户访问令牌 . 即使您在 params 字典中专门设置了应用程序访问令牌,它也会被此方法中的用户访问令牌覆盖 .

    似乎围绕这种困境有两种方法 . 我们可以使用Facebook SDK并考虑到这一点,绝对不推荐 . 或者我们可以诉诸标准的HTTP请求,并将事情掌握在自己手中 . 以下是我处理第二种方法的方法 .

    首先,我们需要app访问令牌,可以通过发出请求来检索: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials .

    然后我们在下一个请求中使用从此请求返回的app访问令牌: https://graph.facebook.com/APP_ID/accounts/test-users?installed=true&name=FULL_NAME&permissions=read_stream&method=post&access_token=APP_ACCESS_TOKEN

    两个请求的总体格式是相同的 . 以下是整个请求在代码中对于两个请求中的第二个请求的样子 .

    NSString *urlString = @"https://graph.facebook.com/APP_ID/accounts/test-users";
    NSURL *testUserUrl = [NSURL URLWithString:urlString];
    NSMutableURLRequest *testUserRequest = [[NSMutableURLRequest alloc] initWithURL:testUserUrl];
    [testUserRequest setHTTPMethod:@"POST"];
    [testUserRequest addValue:@"text/plain" forHTTPHeaderField:@"content-type"];
    NSString *bodyString = @"installed=true&permissions=read_stream&access_token=APP_ACCESS_TOKEN";
    NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
    [testUserRequest setHTTPBody:bodyData];
    [[NSURLConnection alloc] initWithRequest:testUserRequest delegate:self];
    [testUserRequest release];
    

    希望这将有助于您通过测试用户进行实验 .

相关问题