2015-01-30 7 views
4

Я интегрирую Facebook LikeView в фрагмент приложения для Android, как определено в официальном fb docs.LikeView Callback

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. onActivityResults срабатывает каждый раз, когда всплывающие подсказки Likeview возвращаются, но без информации о результате.

Пожалуйста, помогите мне в определении того, что мне не хватает. Любая помощь будет принята с благодарностью

+0

Это намеренно. Почему вы хотите узнать, понравилась ли вам страница или нет? –

+0

Мы хотим наградить клиента, если ему понравилась страница. Я вызвал Graph API «/ me/likes/{pageid}» в событии OnActivityResult, чтобы узнать, понравилась ли пользователю страница, но похоже, что это событие не является правильным местом. Даже если пользователю понравилась страница, график api иногда возвращает пустой набор данных. –

+0

Существует один другой недостаток использования графического API «/ me/likes/pageid», для которого нам нужно разрешение «user_likes» также для этого api. –

ответ

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

Пожалуйста, объясните, как это отвечает на вопрос плаката, особенно, поскольку комментарии и имена переменных в испанском языке затрудняют понимание кода. –

+0

Этот ответ помог мне. Специально идея в порядке. Но из SDK v4, кажется, мы можем « – kalan

+0

никогда не видели переменные на родном языке, они должны сделать язык SDK совместимым ... –

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. Я просто проверяю, если data.hasExtra ("com.facebook.platform.protocol.RESULT_ARGS") – Gabriel

+0

Проверьте 'data! = Null' перед его использованием, чтобы избежать некоторых сбоев. – thundertrick

+0

нет необходимости в жестком кодексе «com.facebook.platform.protocol.RESULT_ARGS». Это общедоступная статическая константа «NativeProtocol.EXTRA_PROTOCOL_METHOD_RESULTS» –