gpt4 book ai didi

javascript - Facebook Javascript API 调用 me/invitable_friends 在 cordova 上仅返回 25 个结果,但在 Web 上则不然

转载 作者:行者123 更新时间:2023-11-28 07:05:03 25 4
gpt4 key购买 nike

我正在 cordova 上开发一款使用 Facebook 集成的游戏。我有一个在安全网站上运行的 Facebook 游戏 Canvas 。

好友请求在网站版本上运行良好(返回超过 25 个结果,因为我正在迭代也返回的 paging.next url)。

但是,在 cordova 版本 (android) 上,它只返回第一个结果集 25。它仍然具有 page.next url JSON 字段,但它只返回一个 type=website 的响应对象。

其他人也遇到过这种情况吗?

最佳答案

经过大量挖掘后,我发现 Android 版 FacebookLib 中处理请求的方式存在问题。 com.phonegap.plugins.facebookconnect 插件的当前版本使用 Android FacebookSDK 3.21.1,因此我不确定这是否仍然是 v4 的问题。

带有分页 URL 的图形结果用于请求下一页,但使用整个 URL,其中包括 https://graph.facebook.com/以及通常的 graphAction 会导致返回不正确的结果集。但是我确定,如果您删除架构和主机部分,它将是正确的。

我修改了 ConnectPlugin.java 以检查是否从 graphAction 中删除了任何架构和主机。现在看起来效果很好。

之前的ConnectPlugin.java:

private void makeGraphCall()  {
Session session = Session.getActiveSession();

Request.Callback graphCallback = new Request.Callback() {

@Override
public void onCompleted(Response response) {
if (graphContext != null) {
if (response.getError() != null) {
graphContext.error(getFacebookRequestErrorResponse(response.getError()));
} else {
GraphObject graphObject = response.getGraphObject();

JSONObject innerObject = graphObject.getInnerJSONObject();
graphContext.success(innerObject);
}
graphPath = null;
graphContext = null;
}
}
};

//If you're using the paging URLs they will be URLEncoded, let's decode them.
try {
graphPath = URLDecoder.decode(graphPath, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

String[] urlParts = graphPath.split("\\?");
String graphAction = urlParts[0];
Request graphRequest = Request.newGraphPathRequest(null, graphAction, graphCallback);
Bundle params = graphRequest.getParameters();

if (urlParts.length > 1) {
String[] queries = urlParts[1].split("&");

for (String query : queries) {
int splitPoint = query.indexOf("=");
if (splitPoint > 0) {
String key = query.substring(0, splitPoint);
String value = query.substring(splitPoint + 1, query.length());
params.putString(key, value);

if (key.equals("access_token")) {
if (value.equals(session.getAccessToken())) {
Log.d(TAG, "access_token URL: " + value);
Log.d(TAG, "access_token SESSION: " + session.getAccessToken());
}
}
}
}
}
params.putString("access_token", session.getAccessToken());

graphRequest.setParameters(params);
graphRequest.executeAsync();
}

ConnectPlugin.java 之后:

private void makeGraphCall()  {
Session session = Session.getActiveSession();

Request.Callback graphCallback = new Request.Callback() {

@Override
public void onCompleted(Response response) {
if (graphContext != null) {
if (response.getError() != null) {
graphContext.error(getFacebookRequestErrorResponse(response.getError()));
} else {
GraphObject graphObject = response.getGraphObject();

JSONObject innerObject = graphObject.getInnerJSONObject();
graphContext.success(innerObject);
}
graphPath = null;
graphContext = null;
}
}
};

//If you're using the paging URLs they will be URLEncoded, let's decode them.
try {
graphPath = URLDecoder.decode(graphPath, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

String[] urlParts = graphPath.split("\\?");
String graphAction = urlParts[0];

///////////////////////
// SECTION ADDED
///////////////////////
final String GRAPH_BASE_URL = "https://graph.facebook.com/";
if(graphAction.indexOf(GRAPH_BASE_URL)==0) {
URL graphUrl = null;
try {
graphUrl = new URL(graphAction);
} catch (MalformedURLException e) {
e.printStackTrace();
}
graphAction = graphUrl.getPath();
}
///////////////////////
// END SECTION ADDED
///////////////////////

Request graphRequest = Request.newGraphPathRequest(null, graphAction, graphCallback);
Bundle params = graphRequest.getParameters();

if (urlParts.length > 1) {
String[] queries = urlParts[1].split("&");

for (String query : queries) {
int splitPoint = query.indexOf("=");
if (splitPoint > 0) {
String key = query.substring(0, splitPoint);
String value = query.substring(splitPoint + 1, query.length());
params.putString(key, value);

if (key.equals("access_token")) {
if (value.equals(session.getAccessToken())) {
Log.d(TAG, "access_token URL: " + value);
Log.d(TAG, "access_token SESSION: " + session.getAccessToken());
}
}
}
}
}
params.putString("access_token", session.getAccessToken());

graphRequest.setParameters(params);
graphRequest.executeAsync();
}

关于javascript - Facebook Javascript API 调用 me/invitable_friends 在 cordova 上仅返回 25 个结果,但在 Web 上则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com