我在尝试使用Android Application
在当前最终用户Facebook墙上发布消息时遇到了问题。
到目前为止:
publish_actions
权限; Facebook SDK 3.x & Graph API v2
May 2014
的最新版本
以下是在用户墙上发布消息的文档:
https://developers.facebook.com/docs/graph-api/reference/v2.0/user/feed(转到Publishing
)
关于需要在用户墙上发布的消息,我需要标记之前由用户选择的一些朋友。
但要使用tag
字段,我需要使用place
字段。
文档说:
姓名: tags
此帖子中标记的用户ID的逗号分隔列表。如果不指定place
。
输入: csv[string]
姓名: place
与此帖相关联的位置的网页ID。
输入: string
什么是位置页面ID?我怎么得到它?
奇怪的是,在我的特殊情况下,我正在向用户提供分享即将到来的Facebook旅行的可能性。
更奇怪的是,此行程由日期和目的地(目的地名称+纬度和经度)定义。用户还可以将此旅行分享给位于旅行目的地的朋友,因此需要将他的朋友标记为 wall post
。
[编辑1]
在查看@Tobi解决方案后,我设法在最终用户墙上发布了一条消息(就我而言,因为我是开发人员)。
到目前为止:邮件正确显示,并标记了一个朋友(我用于测试用户的虚拟帐户),还有一个地方:法国巴黎。
使用以下搜索查询(感谢@Tobi)search?q=Paris,France&type=place
我可以获得法国巴黎的ID
。
由于我没有对部件进行编码以检索Place ID
,因此首先将其手动放入代码中以便首先测试该功能。
[编辑结束1]
[编辑2]
我注意到我忘记将带有隐私值的部分添加到我的args Bundle
。但它并没有改变一个该死的东西:我的帖子只有我自己才能看到。
转到我的Facebook墙,这是我得到的:
将帖子的公共参数(挂锁图标)悬停在“所有标记的人”上。 点击图标会显示仅选择“仅我”的设置列表。
为什么“只有我”,即使我在request parameters
特别说我+我的虚拟账户?
甚至更奇怪:用我的虚拟账户将发布参数的属性更改为“自定义”并不会改变该死的东西。为什么? Facebook真的让我神经紧张......
对于其余部分,正确显示消息内容,相关位置是好的。至少有一个正确的。但是,我还是没有得到其余的......
[编辑结束2]
所以这是更新后的代码:
if (this.session != null && this.session.isOpened()) {
final Bundle args = new Bundle();
if (this.selectedContacts.isEmpty() == false) {
args.putString("message", message);
args.putString("place", "170558129707208"); //manually added Paris, France ID
String tags = "";
//here I made some modifications regarding the tags so that is built correctly
for (int it = 0; it < this.selectedContacts.size(); it++) {
final String name = this.selectedContacts.get(it).toString();
final String friendID = String.valueOf(getIdFromName(name)); // returns an int
if (it == this.selectedContacts.size())
tags += friendID;
else
tags += friendID + ",";
}
// Forgot to add privacy values to bundle !
final JSONObject privacyValues = new JSONObject(); //not android JSON, but JSON-Simple lib
privacyValues.put("value", "CUSTOM");
String allow = this.currentUser.getId() + "," + tags;
privacyValues.put("allow", allow); // to limit the visibility of this post
args.putString("privacy", privacyValues.toJSONString()); //forgot that one...
final Request shareTravelRequest = new Request(this.session, this.currentUser.getID() + "/feed",
args, HttpMethod.POST, new Request.Callback() {
public final void onCompleted(final Response response) {
//TODO
}
}
);
final Response response = shareTravelRequest.executeAndWait();
if (response.getError() == null) // in this case, no error occurred
return true;
else {
this.lastErrorMessage = response.getError().getErrorMessage();
Log.e("Something went wrong while posting Facebook message", this.lastErrorMessage);
Log.e("Error type is", response.getError().getErrorType());
Log.e("Error code is", String.valueOf(response.getError().getErrorCode()));
return false;
}
}
}
不幸的是我肯定在某个地方出错了,因为虽然帖子确实出现在我的Facebook墙上,我的虚拟帐户被标记并且链接到了该地点,我的虚拟帐户无法看到帖子。
我尝试使用以下设置在Facebook墙上手动创建相同的帖子:
在这种情况下,我的虚拟帐户会在墙上和墙上看到帖子。
所以我想知道哪些参数我必须出错,因为没有太多参数,我只是不明白为什么。
谢谢!
答案 0 :(得分:1)
您可以使用搜索并使用类型place
(https://developers.facebook.com/docs/graph-api/using-graph-api/v2.0#search),或者,如果您有定位日期,请在place
表上使用FQL查询({{3 }})如下所述:https://developers.facebook.com/docs/reference/fql/place/
答案 1 :(得分:0)
使用通过Facebook Developer App设置制作的两个测试帐户,而不是破坏TOS的虚拟帐户。由于您请求publish_actions
,因此您可能未提交应用以供审核。除非您的虚拟帐户也是角色中的开发人员/测试人员(这会再次破坏服务条款),否则您的虚拟帐户将无法查看帖子。
只有未发布的应用程序的开发人员和测试人员才能看到该应用程序发布的帖子。