Ошибка разрешений - Попытка найти друзей с помощью Android Facebook SDK - PullRequest
3 голосов
/ 11 июня 2011

Я пытаюсь добавить в мое приложение для Android функцию, которая позволяет пользователям "регистрироваться" вместе с другими людьми, отмеченными для регистрации.У меня есть метод checkins, работающий без проблем, и я могу пометить его, добавив идентификатор пользователя в качестве параметра (см. Код ниже)

public void postLocationTagged(String msg, String tags, String placeID, Double lat, Double lon) {
    Log.d("Tests", "Testing graph API location post");
    String access_token = sharedPrefs.getString("access_token", "x");
     try {
         if (isSession()) {
            String response = mFacebook.request("me");
            Bundle parameters = new Bundle();
            parameters.putString("access_token", access_token);
            parameters.putString("place", placeID);
            parameters.putString("Message",msg);
            JSONObject coordinates = new JSONObject();
            coordinates.put("latitude", lat);
            coordinates.put("longitude", lon);
            parameters.putString("coordinates",coordinates.toString());
            parameters.putString("tags", tags);
            response = mFacebook.request("me/checkins", parameters, "POST");
            Toast display = Toast.makeText(this, "Checkin has been posted to Facebook.", Toast.LENGTH_SHORT);
            display.show();
            Log.d("Tests", "got response: " + response);
            if (response == null || response.equals("") || 
                    response.equals("false")) {
               Log.v("Error", "Blank response");
            }
        } else {
         // no logged in, so relogin
         Log.d(TAG, "sessionNOTValid, relogin");
         mFacebook.authorize(this, PERMS, new LoginDialogListener());
        }
     } catch(Exception e) {
         e.printStackTrace();
     }
}

Это отлично работает (я опубликовал его на случай, если это поможеткому-то еще!), проблема, с которой я столкнулся, заключается в том, что я пытаюсь создать список друзей пользователей, чтобы они могли выбрать друзей, которых они хотят пометить.У меня есть метод getFriends (см. Ниже), который я затем собираюсь использовать для создания AlertDialog, который пользователь может выбрать, из которого, в свою очередь, даст мне идентификатор для использования в вышеупомянутом методе "postLocationTagged".

public void getFriends(CharSequence[] charFriendsNames,CharSequence[] charFriendsID, ProgressBar progbar) {
    pb = progbar;
    try {
        if (isSession()) {
            String access_token = sharedPrefs.getString("access_token", "x");
            friends = charFriendsNames;
            friendsID = charFriendsID;
           Log.d(TAG, "Getting Friends!");
           String response = mFacebook.request("me");
           Bundle parameters = new Bundle();
           parameters.putString("access_token", access_token);
           response = mFacebook.request("me/friends", parameters, "POST");

           Log.d("Tests", "got response: " + response);
           if (response == null || response.equals("") || 
                   response.equals("false")) {
              Log.v("Error", "Blank response");
           }

        } else {
        // no logged in, so relogin
        Log.d(TAG, "sessionNOTValid, relogin");
        mFacebook.authorize(this, PERMS, new LoginDialogListener());
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

Когда я смотрю на ответ в журнале, он читает:

"получил ответ: {" ошибка ": {" тип ":" OAuthException "," сообщение ":" (# 200) Ошибка разрешений"}}"

Я просмотрел документацию по GraphAPI и искал похожие вопросы, но безрезультатно!Я не уверен, нужно ли мне запрашивать дополнительные разрешения для приложения или это просто запрещено!Любая помощь / предложения будут с благодарностью.

Ответы [ 3 ]

2 голосов
/ 12 июня 2011

Решение заключается в реализации RequestListener при отправке запроса в API графа Facebook.У меня есть новый метод getFriends () (см. Ниже), который использует AsyncGacebookRunner для запроса данных.

public void getFriends(CharSequence[] charFriendsNames,String[] sFriendsID, ProgressBar progbar) {
    try{
        //Pass arrays to store data
        friends = charFriendsNames;
        friendsID = sFriendsID;
        pb = progbar;
        Log.d(TAG, "Getting Friends!");
        //Create Request with Friends Request Listener
        mAsyncRunner.request("me/friends", new FriendsRequestListener());
    } catch (Exception e) {
        Log.d(TAG, "Exception: " + e.getMessage());
    }
}

AsyncFacebookRunner делает запрос с помощью пользовательского FriendsRequestListener (см. Ниже), который реализует класс RequestListener;

private class FriendsRequestListener implements RequestListener {
    String friendData;

    //Method runs when request is complete
    public void onComplete(String response, Object state) {
        Log.d(TAG, "FriendListRequestONComplete");
        //Create a copy of the response so i can be read in the run() method.
        friendData = response; 

        //Create method to run on UI thread
        FBConnectActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                try {
                    //Parse JSON Data
                    JSONObject json;
                    json = Util.parseJson(friendData);

                    //Get the JSONArry from our response JSONObject
                    JSONArray friendArray = json.getJSONArray("data");

                    //Loop through our JSONArray
                    int friendCount = 0;
                    String fId, fNm;
                    JSONObject friend;
                    for (int i = 0;i<friendArray.length();i++){
                        //Get a JSONObject from the JSONArray
                        friend = friendArray.getJSONObject(i);
                        //Extract the strings from the JSONObject
                        fId = friend.getString("id");
                        fNm = friend.getString("name");
                        //Set the values to our arrays
                        friendsID[friendCount] = fId;
                        friends[friendCount] = fNm;
                        friendCount ++;
                        Log.d("TEST", "Friend Added: " + fNm);
                    }

                    //Remove Progress Bar
                    pb.setVisibility(ProgressBar.GONE);

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FacebookError e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

Не стесняйтесь использовать любой из этого кода в своих собственных проектах или задавать любые вопросы о нем.

2 голосов
/ 11 июня 2011

Вам могут потребоваться следующие разрешения:

  • user_checkins
  • friends_checkins
  • read_friendlists
  • manage_friendlists
  • publish_checkins

Проверьте связанные из документов API. Перед этим убедитесь, что эта строка вызывает эту ошибку разрешения, и попытайтесь ее исправить.

0 голосов
/ 05 мая 2014

Вы можете private static final String[] PERMISSIONS = new String[] {"publish_stream","status_update",xxxx}; ххх - это разрешения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...