2013-07-10 2 views
1

Я пытаюсь отправить запрос с помощью facebook sdk из android.Код ошибки 110 при использовании Facebook SDK3 в Android

Вот как я это сделать:

private void sendInviteRequestDialog() { 
     Bundle params = new Bundle(); 
     params.putString("id", USER_ID); 
     params.putString("to", "xxxx"); 
     showDialogWithoutNotificationBar("apprequests", params); 
} 

WebDialog requestsDialog = (
        new WebDialog.RequestsDialogBuilder(HelloActivity.this, 
          Session.getActiveSession(), 
          params)) 
          .setOnCompleteListener(new OnCompleteListener() { 

           @Override 
           public void onComplete(Bundle values, 
             FacebookException error) { 
            if (error != null) { 
             if (error instanceof FacebookOperationCanceledException) { 
              Toast.makeText(HelloActivity.this.getApplicationContext(), 
                "Request cancelled", 
                Toast.LENGTH_SHORT).show(); 
             } else { 
              Toast.makeText(HelloActivity.this.getApplicationContext(), 
                "Network Error", 
                Toast.LENGTH_SHORT).show(); 
             } 
            } else { 
             final String requestId = values.getString("request"); 
             if (requestId != null) { 
              Toast.makeText(HelloActivity.this.getApplicationContext(), 
               "Request sent", 
               Toast.LENGTH_SHORT).show(); 
             } else { 
              Toast.makeText(HelloActivity.this.getApplicationContext(), 
                "Request cancelled", 
                Toast.LENGTH_SHORT).show(); 
             } 
            } 
           } 

           }) 
          .build(); 
      requestsDialog.show(); 

Итак, я зарегистрированным в фб, я могу видеть свой список друзей, пост на моей стене, но я не могу отправить запрос на приглашение на мое приложение , Тот же URL-адрес, используемый в веб-браузере на компьютере, работает, но не в приложении для Android. Это ошибка я получаю:

An error occured. Please try again later. 
API Error code: 110 
API Error Description: Invalid user id 
Error Message: Missing user cookie(to validate session user) 

Мои права являются:

private static final List<String> PERMISSIONS = Arrays.asList(
      "publish_actions", "publish_stream", "offline_access", "email", 
      "basic_info", "user_likes", "user_birthday", "status_update", 
      "create_note", "share_item", "user_status"); 

Я очень потерял в этот момент, не получить это. Любые идеи были бы замечательными. Спасибо.

ответ

0

Вы должны послать facebook лексема тоже

String Token = session.getAccessToken(); 

А потом

params.putString("token", Token);   
    params.putString("id", USER_ID); 
    params.putString("to", "xxxx"); 

Это должно быть дела

+0

мм, кажется, логика таким образом. Он показывает мне страницу, где я должен войти (это странно и не думаю, что все в порядке), и после этого «Произошла ошибка. Повторите попытку позже». –

1

я трачу много времени, но уже нашел решение. Проблема с Facebook - это кеш. Я создаю метод для получения сеанса и очистить кэш является маркером создаются из кэша:

private Session getFBSession() { 
    Session session = Session.getActiveSession(); 

    if (session == null) { 
     session = new Session(getActivity()); 
     Session.setActiveSession(session); 

     if (session.getState() == SessionState.CREATED_TOKEN_LOADED) 
      session.closeAndClearTokenInformation(); 
    } 

    return session; 
} 

Но для вас это не прийти, потому что закрытое заседание не открывается заседание. Так что вам нужно после того, как кнопка возобновить сеанс:

private void publishFeedDialog() { 
    Session session = getFBSession(); 

    if (!session.isOpened()) 
     session.openForRead(new Session.OpenRequest(this).setCallback(facebookForShareCallback)); 
    else 
     session.openActiveSession(getActivity(), this, true, facebookForShareCallback); 
} 

И обратного вызова должно быть что-то вроде этого:

private Session.StatusCallback facebookForShareCallback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     if (session.isOpened()) { 
      Bundle params = new Bundle(); 
      params.putString("name", "name"); 
      params.putString("caption", event.title); 
      params.putString("description", event.descLong); 
      params.putString("link", "http://www.lt"); 
      params.putString("picture", event.logo); 

      WebDialog feedDialog = new WebDialog.FeedDialogBuilder(getActivity(), session, params) 
        .build(); 

      feedDialog.show(); 
     } else if (state == SessionState.CLOSED_LOGIN_FAILED) { 
      if (checkin != null) 
       Toast.makeText(getActivity(), getString(R.string.facebook_error), Toast.LENGTH_LONG).show(); 
     } 
    } 
};