如何在 Android SDK 4.0 中 post 将自定义故事直接添加到用户的 Facebook 墙上?
How do I post custom stories directly to the user's Facebook wall in Android SDK 4.0?
我在不使用共享对话框的情况下将我的自定义故事直接 post 发送到此人的墙上时遇到问题,并且一直无法找到有关如何在新版本中执行此类操作的示例或适当文档SDK(Facebook 网站上有关 Graph API 的大部分文档似乎已过时...)此时此人已登录 Facebook,已授予该应用 post 的权限,并且单击按钮分享他们使用该应用程序执行社交操作的故事。
目前,我的代码设法创建并执行了一个 GraphRequest
,其中包含有关对象和操作的信息,return 无误地对其进行了回调,并给出了一个响应return 代码 200(OK),其中有一个 'id' 数字,我认为这表示成功 post,但故事并没有上墙。
当我转到 Facebook 开发者网站并在对象浏览器中查找我的应用程序时,我还看到我在请求中发送的对象已创建...显示了我在请求中发送的所有详细信息在那里正确...我确定我 post 将请求发送到正确的图形路径以执行我的操作,我的 AccessToken
有效,该应用程序具有适当的 publish_actions
权限,我我很确定我给了操作期望的参数,(至少,对象参数似乎是有效的并且使用正确的名称作为它的键,因为对象 posted 而我没有得到错误返回缺少 my_object
参数...)
这是我的代码(名称空间、对象和操作名称已更改,但对于手头的问题应该没有影响):
// Create object
JSONObject myObject=new JSONObject();
try {
myObject.put("og:type", "my_namespace:my_object");
myObject.put("og:title", facebookStoryTitle);
myObject.put("og:description", facebookStoryDescription);
myObject.put("place:location:latitude", facebookPlaceLat);
myObject.put("place:location:longitude", facebookPlaceLon);
} catch (JSONException e) {
String toastText = "JSON Error: " + e.getMessage();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_SHORT).show();
return;
}
// Create action
Bundle params = new Bundle();
params.putInt("expires_in", facebookStoryExpires);
params.putString("my_object", myObject.toString());
// Create request
GraphRequest request = new GraphRequest(AccessToken.getCurrentAccessToken(),
"me/my_namespace:my_action", params, HttpMethod.POST,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
FacebookRequestError error = response.getError();
if (error != null) {
// Display User Error Message
String toastText = error.getErrorUserMessage();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_LONG).show();
return;
} else {
// DEBUG: Display Response
String toastText = response.toString();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_LONG).show();
return;
}
}
});
// Send Request
request.executeAsync();
你必须给
params.putString("fb:explicitly_shared", true);
在时间轴中显示 post。
我在不使用共享对话框的情况下将我的自定义故事直接 post 发送到此人的墙上时遇到问题,并且一直无法找到有关如何在新版本中执行此类操作的示例或适当文档SDK(Facebook 网站上有关 Graph API 的大部分文档似乎已过时...)此时此人已登录 Facebook,已授予该应用 post 的权限,并且单击按钮分享他们使用该应用程序执行社交操作的故事。
目前,我的代码设法创建并执行了一个 GraphRequest
,其中包含有关对象和操作的信息,return 无误地对其进行了回调,并给出了一个响应return 代码 200(OK),其中有一个 'id' 数字,我认为这表示成功 post,但故事并没有上墙。
当我转到 Facebook 开发者网站并在对象浏览器中查找我的应用程序时,我还看到我在请求中发送的对象已创建...显示了我在请求中发送的所有详细信息在那里正确...我确定我 post 将请求发送到正确的图形路径以执行我的操作,我的 AccessToken
有效,该应用程序具有适当的 publish_actions
权限,我我很确定我给了操作期望的参数,(至少,对象参数似乎是有效的并且使用正确的名称作为它的键,因为对象 posted 而我没有得到错误返回缺少 my_object
参数...)
这是我的代码(名称空间、对象和操作名称已更改,但对于手头的问题应该没有影响):
// Create object
JSONObject myObject=new JSONObject();
try {
myObject.put("og:type", "my_namespace:my_object");
myObject.put("og:title", facebookStoryTitle);
myObject.put("og:description", facebookStoryDescription);
myObject.put("place:location:latitude", facebookPlaceLat);
myObject.put("place:location:longitude", facebookPlaceLon);
} catch (JSONException e) {
String toastText = "JSON Error: " + e.getMessage();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_SHORT).show();
return;
}
// Create action
Bundle params = new Bundle();
params.putInt("expires_in", facebookStoryExpires);
params.putString("my_object", myObject.toString());
// Create request
GraphRequest request = new GraphRequest(AccessToken.getCurrentAccessToken(),
"me/my_namespace:my_action", params, HttpMethod.POST,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
FacebookRequestError error = response.getError();
if (error != null) {
// Display User Error Message
String toastText = error.getErrorUserMessage();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_LONG).show();
return;
} else {
// DEBUG: Display Response
String toastText = response.toString();
Toast.makeText(getApplicationContext(), toastText,
Toast.LENGTH_LONG).show();
return;
}
}
});
// Send Request
request.executeAsync();
你必须给
params.putString("fb:explicitly_shared", true);
在时间轴中显示 post。