Post Facebook Graph API中的地点字段的页面ID是什么?

时间:2014-06-13 09:45:58

标签: android facebook facebook-graph-api facebook-wall facebook-sdk-3.0

我在尝试使用Android Application在当前最终用户Facebook墙上发布消息时遇到了问题。

到目前为止:

  • 用户使用所有必需的权限登录,尤其是 publish_actions权限;
  • Facebook SDK 3.x & Graph API v2
  • 起,我使用的是May 2014的最新版本
  • EDIT 2 开始发布到墙上,但是存在问题 隐私设置:任何人都不能看到帖子 在帖子中被标记的收件人!有关详细信息,请参阅 EDIT 2

以下是在用户墙上发布消息的文档:

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墙上手动创建相同的帖子:

  1. 首先我提供了一条消息
  2. 第二我提供了一个地方
  3. 第三我标记了我的虚拟账户
  4. 四,我选择谁可以看到这篇文章:我和我的虚拟账户
  5. 最后,我发布了这条消息。
  6. 在这种情况下,我的虚拟帐户会在墙上和墙上看到帖子

    所以我想知道哪些参数我必须出错,因为没有太多参数,我只是不明白为什么。

    谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用搜索并使用类型placehttps://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,因此您可能未提交应用以供审核。除非您的虚拟帐户也是角色中的开发人员/测试人员(这会再次破坏服务条款),否则您的虚拟帐户将无法查看帖子。

只有未发布的应用程序的开发人员和测试人员才能看到该应用程序发布的帖子。