2012-05-14 2 views
3

У меня возникла проблема с отзывом прав доступа Facebook с помощью Android SDK.Как отменить все разрешения Facebook с помощью Android SDK?

В моем приложении есть случай, когда я хочу отменить все разрешения. Согласно документации на Facebook, вы можете использовать AsyncFacebookRunner для этого, и «если вы не укажете разрешение, это полностью отменяет действие приложения».

В настоящее время я делаю это так:

String method = "DELETE"; 
Bundle params = new Bundle(); 
params.putString("permission", ""); 

mAsyncRunner.request("/me/permissions", params, method, new RequestListener() 
        { ... }, null); 

используя подпись запроса, как это:

void request(String graphPath, Bundle parameters, final String httpMethod, 
      RequestListener listener, final Object state) 

OnComplete() функция обратного вызова, кажется, вернуться в порядке, но не по-видимому, отключили токен доступа. Я предполагаю это, потому что в следующий раз, когда я вызываю facebook.authorize(), он работает, не нажимая пользователя на страницу входа в Facebook.

Любые идеи, что мне нужно, чтобы полностью отказаться от доступа к токену доступа? Или есть другой/лучший способ сделать это? Большое спасибо!

+0

Если вы отправляете команду DELETE/Me/разрешения, приложение facebook должно быть удалено из списка приложений пользователя имеет (http://www.facebook.com/settings?tab=applications). Появляется ли приложение по-прежнему? Если это так, команда DELETE обрабатывается неправильно. Используя действительный токен доступа, можете ли вы проверить, что команда HTTP Delete работает для вас в проводнике Graph API? Я столкнулся с проблемой, когда SDK C# не работал для меня, поэтому в крайнем случае я использовал javascript SDK для удаления разрешений. Возможно, javascript SDK будет работать и на вас. – DMCS

+0

Я подтвердил, что приложение все еще появилось даже после того, как я запустил запрос mAsyncRunner, чтобы удалить его - так что вы правы, что он почему-то не работает, даже если обратный вызов onComplete() возвращен без какого-либо исключения. У меня есть действительный токен доступа; как я могу попробовать то же самое, используя http (т. е. что такое URL-адрес, который делает то же самое)? – gcl1

+0

Инструмент API-анализатора графиков - ваш друг :) http: // разработчики.facebook.com/tools/explorer. Если он работает правильно, попробуйте выполнить «GET» для me/permissions, которые следует немедленно, выполнив «DELETE». Иногда SDK получают лучшую синхронизацию при выполнении GET, за которым следует DELETE (видимо, это происходит из первых рук). – DMCS

ответ

0

Из этого сообщения: Facebook deauthorize my app и другие, что невозможно отменить авторизацию приложения программным способом. К сожалению, вызов выше успешно возвращается в onCreate(), но ничего не делает для удаления/удаления приложения для пользователя.

Итог: это похоже на единственный способ, чтобы приложение было для пользователя, чтобы сделать это прямо в Facebook. Если кто-то знает по-другому, скажите об этом - но в противном случае, не тратьте время на то, чтобы пытаться! Благодарю.

+3

Этот ответ больше не является корректным, удалять по имени/me/permissions работает как размещено в другом месте. – Jay

0

Я использую код, предложенный в вопросе, и полностью отменил мое тестовое приложение. Протестировал его несколько раз, и он работал каждый из них.

Это также код предлагается в официальной документации facebook здесь: https://developers.facebook.com/docs/mobile/android/build/ - Шаг 7

3

Для всех, кто ищет, чтобы сделать это в более поздних версиях SDK/Graph API - Оказывается, правильный способ сделать это сейчас как показано здесь https://developers.facebook.com/docs/graph-api/reference/user/permissions/

new Request(
    session, 
    "/me/permissions/{permission-to-revoke}", 
    null, 
    HttpMethod.DELETE, 
    new Request.Callback() { 
     public void onCompleted(Response response) { 
      /* handle the result */ 
     } 
    } 
).executeAsync(); 

Оставив /{permission-to-revoke} офф второго параметра будет отменить все разрешения

+0

Удалит ли это приложение из FB? –

+1

Я успешно использовал GraphAPI. Он похож на код: GraphRequest запрос = GraphRequest.newDeleteObjectRequest (yourToken, "/" + yourUserId + "/ разрешения", новый GraphRequest.Callback() { @Override общественного недействительными OnCompleted (GraphResponse graphResponse) { } }); request.executeAsync(); – funcoder

1

Вы можете удалить все приложения (п Ot только разрешение) от пользователей Facebook счета с использованием новейшей SDK (шахта 4.1.1)

void deleteFacebookApplication(){ 
    new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions", null, HttpMethod.DELETE, new GraphRequest.Callback() { 
     @Override 
     public void onCompleted(GraphResponse response) { 
      boolean isSuccess = false; 
      try { 
       isSuccess = response.getJSONObject().getBoolean("success"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      if (isSuccess && response.getError()==null){ 
       // Application deleted from Facebook account 
      } 

     } 
    }).executeAsync(); 
} 
Смежные вопросы