LikeView 回调函数

4

我正在将Facebook LikeView集成到Android应用程序的一个片段中,如官方文档fb docs所定义。

LikeView like_button = (LikeView) findViewById(R.id.like_view);
like_button.setObjectId(...);

我也这样处理了onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

uiHelper.onActivityResult(requestCode, resultCode, data, null);
.....
}

我无法通过LikeView编程地查找用户是否已经喜欢或取消喜欢该页面。每当likeview的弹出窗口返回时,onActivityResults都会触发,但没有关于结果的信息。

请帮助我确定我缺少了什么。 任何帮助将不胜感激。


这是有意为之的。你为什么想知道用户是否喜欢该页面? - Ming Li
我们想要奖励客户,如果他/她已经喜欢了页面。我在OnActivityResult事件中调用了Graph API "/me/likes/{pageid}"来知道用户是否已经喜欢了页面,但似乎这个事件不是正确的地方。即使用户已经喜欢了页面,图形API有时也会返回空数据集。 - Amit Mittal
使用Graph API "/me/likes/pageid" 的另一个缺点是我们需要获得"user_likes"权限才能使该API正常工作。 - Amit Mittal
就像我之前所说的,这是有意为之的,因为你需要额外的权限。你也不能激励用户点赞你的页面,这就是为什么我问你为什么需要这些信息的原因。 - Ming Li
请原谅我的无知,但是已经有很多应用程序/游戏提供了一些东西,如果用户喜欢/分享他们的页面,他们不是在遵循指南吗? - Amit Mittal
1
激励用户有正确和错误的方式。请参阅平台政策第4.5节:https://developers.facebook.com/policy/ - Ming Li
2个回答

7

您可以通过添加以下代码到onActivityResults中获取用户的操作:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       default:
            if (resultCode == RESULT_OK) {
                // verify we're returning from like action
                if ("com.facebook.platform.action.request.LIKE_DIALOG".equals(data.getStringExtra("com.facebook.platform.protocol.PROTOCOL_ACTION"))) {
                    // get action results
                    Bundle bundle = data.getExtras().getBundle("com.facebook.platform.protocol.RESULT_ARGS");
                    if (bundle != null) {
                        bundle.getBoolean("object_is_liked"); // liked/unliked
                        bundle.getInt("didComplete");
                        bundle.getInt("like_count"); // object like count
                        bundle.getString("like_count_string");
                        bundle.getString("social_sentence");
                        bundle.getString("completionGesture"); // liked/cancel/unliked
                    }
                }
            }
            break;
}

1
数据可能没有额外的“com.facebook.platform.protocol.PROTOCOL_ACTION”,但仍包含@Duda在“com.facebook.platform.protocol.RESULT_ARGS”捆绑包中所说的一切。我只需检查数据是否具有“com.facebook.platform.protocol.RESULT_ARGS”附加项。 - Gabriel
在使用数据之前检查 data != null 可以避免一些崩溃。 - thundertrick
不需要硬编码“com.facebook.platform.protocol.RESULT_ARGS”。它是一个名为“NativeProtocol.EXTRA_PROTOCOL_METHOD_RESULTS”的公共静态常量。 - Mario Lenci

0
希望这可以帮到你。
        private String siLeGusta = "";    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_final);
            ...
            ...

            Session session = Session.getActiveSession(); // si estas en un activity diferente

            String solicitud = "/"+uid+"/likes/"+page_id; //uid=user_id, page_id = el id de la pagina que deseas saber si ya tiene like del usuario.
            new Request(
                    session,
                    solicitud, //"/{user-id}/likes/{page-id}",
                    null,
                    HttpMethod.GET,
                    new Request.Callback() {
                        public void onCompleted(Response response) {
                            GraphObject graphObject = response.getGraphObject();
                            //String s = txtFinal.getText().toString();
                            if (graphObject != null) {
                                JSONObject jsonObject = graphObject.getInnerJSONObject();
                                try {
                                    JSONArray array = jsonObject.getJSONArray("data");
                                    for (int i = 0; i < array.length(); i++) {
                                        JSONObject object = (JSONObject) array.get(i);
                                        siLeGusta = object.get("id").toString();

                                    }
                                } catch (JSONException e) {

                                    e.printStackTrace();
                                }
                            }
                            if (siLeGusta.equals(page_id)){
                                likeView.setVisibility(View.INVISIBLE);
                                txtFinal.setText("A tí te gusta la página de ....");
                                txtFinal.setTextSize(30);

                            }else{
                                txtFinal.setText("Todavía no has dado LIKE a la página de ....");
                                txtFinal.setTextSize(30);
                                likeView.setVisibility(View.VISIBLE);
                            }
                        }
                    }).executeAsync();

... //otras instrucciones aquí.

    }

1
请解释一下它是如何回答发帖者的问题,特别是由于西班牙语注释和变量名使得仅凭代码难以理解。 - Ken Y-N
这个答案帮了我很多,特别是那个想法还不错。但是从SDK v4开始,好像我们不能…… - kalan nawarathne
从来没有看到过母语变量,它们应该使SDK的语言符合规范... - Gun2sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接