Facebook Graph API 仅返回'success true' JSON



我会创建一个Facebook客户端作为Android应用程序。我已经实现了成功的登录过程。现在我想获取我的个人资料的信息(简单的请求,到目前为止只有默认值)。

我正在打开图形网址

https://graph.facebook.com/me?access_token={ACCESS_TOKEN}

使用Android应用程序(Web客户端应该可以工作,因为我在其他应用程序上使用完全相同的应用程序)响应是:

{"success":true}

响应标头为:

null: HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 16
Content-Type: text/javascript; charset=UTF-8
Date: Mon, 27 Mar 2017 19:53:18 GMT
Expires: Sat, 01 Jan 2000 00:00:00 GMT
facebook-api-version: v2.8
Pragma: no-cache
X-Android-Received-Millis: 1490644395774
X-Android-Response-Source: NETWORK 200
X-Android-Selected-Protocol: http/1.1
X-Android-Sent-Millis: 1490644395542
X-FB-Debug: {X-FB-DEBUG}
x-fb-rev: 2916655
x-fb-trace-id: {x-fb-trace-id}

当我在浏览器(Chrome和Firefox)上打开完全相同的网址时,我得到了预期的响应:

{
"name": "First_name Surname",
"id": "123456789"
}

Facebook似乎不想将我重定向到另一个页面,因此响应应该相同。

应用程序中 Web 客户端的代码如下所示:

class postRequest_runtimeTask implements Runnable
{
private String url;
private HashMap<String, String> data;
private postRequest_runtimeTask(String urlS, HashMap<String, String> dataS) {url = urlS; data = dataS;};
@Override
public void run()
{
URL requestUrl;
try
{
requestUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) requestUrl.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
/*
for(String key : conn.getHeaderFields().keySet())
{
List<String> tmp = conn.getHeaderFields().get(key);
for(String tmpval : tmp)
{
Log.v("Header " + key, tmpval);
}
}
*/
/* Build String from HashMap for POST-Params */
StringBuilder requestDataTmp = new StringBuilder();
boolean first = true;
for(Map.Entry<String, String> entry : data.entrySet())
{
if(first)
{
first = false;
}
else
{
requestDataTmp.append("&");
}
requestDataTmp.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
requestDataTmp.append("=");
requestDataTmp.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
String requestData = requestDataTmp.toString();
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(requestData);
writer.flush();
writer.close();
os.close();
int responseCode=conn.getResponseCode();
TEMP_BUFFER = "";
if (responseCode == HttpsURLConnection.HTTP_OK)
{
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
while((line=br.readLine()) != null)
{
TEMP_BUFFER += line;
}
}
else
{
//TEMP_BUFFER = "";
Log.e("HTTP RESPONSE CODE", String.valueOf(responseCode) + ", url: " + url + ", content: nn" + TEMP_BUFFER);
}
}
catch(Exception exp)
{
exp.printStackTrace();
}
}
}
Thread postRequest_runtimeTastAsync = new Thread(new postRequest_runtimeTask(url, data));
postRequest_runtimeTastAsync.start();

谢谢!

您正在使用 POST 请求。API 仅回答 POST 请求 (https://developers.facebook.com/docs/pages/managing) 上的"成功"字段。

您必须改用 GET 请求。

相关内容

最新更新