2013-05-04 4 views
1

Я использую android facebook api для публикации на фиде пользователей.android facebook post api не работает

Login успешно работает, , но функция publishstory не работает. У меня есть код ниже.

private void publishStory() { 

     Session session = Session.getActiveSession(); 

     if (session != null){ 

      // Check for publish permissions  
      List<String> permissions = session.getPermissions(); 
      if (!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session 
         .NewPermissionsRequest(this, PERMISSIONS); 
      session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

      Bundle postParams = new Bundle(); 
      postParams.putString("name", "Facebook SDK for Android"); 
      postParams.putString("caption", "Build great social apps and get more installs."); 
      postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
      postParams.putString("link", "https://developers.facebook.com/android"); 
      postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

      Request.Callback callback= new Request.Callback() { 
       public void onCompleted(Response response) { 
        JSONObject graphResponse = response 
               .getGraphObject() 
               .getInnerJSONObject(); 
        String postId = null; 
        try { 
         postId = graphResponse.getString("id"); 
        } catch (JSONException e) { 
         Log.i("error", 
          "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(FacebookActivity.this.getApplicationContext(), 
          error.getErrorMessage(), 
          Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(FacebookActivity.this 
           .getApplicationContext(), 
           postId, 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 

      Request request = new Request(session, "me/feed", postParams, 
            HttpMethod.POST, callback); 

      RequestAsyncTask task = new RequestAsyncTask(request); 
      task.execute(); 
     } 

    } 

проблема он выполняет до линии

session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

, а затем выходит из функции по возвращении не показывая всплывающее окно. Любые идеи?

ответ

0

Возврат должен быть вызван только фрагмент деятельности я делал это в нормальной деятельности, создавшей проблему.

0

Как вы показали код вызова requestNewPublishPermissions(), когда токен доступа найден без необходимых разрешений. Но для того, чтобы завершить действие после запроса, вы должны определить Session.StatusCallback.

private static Session.StatusCallback sessionCallback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     Log.i(TAG, "callback"); 
     if (exception == null) { 
      if (pendingPublishAction && state.isOpened()) { 
       pendingPublishAction = false; 
       //do your post action; 
      } 
     } 
     else{ 
      //handle exception 
     } 
    } 
}; 

Однако, от того, что вы сказали, что, казалось, что даже не диалог для новых разрешений предъявляется. Вы реализовали onActivityResult вот так?

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session session = Session.getActiveSession(); 
    if (session != null) { 
     session.onActivityResult(this, requestCode, resultCode, data); 
    } 
} 

Если вы сделали это, должно быть, были какие-то другие ошибки во время фазы аутентификации, в этом случае LogCat должен показать что-то.

Смежные вопросы