权限错误 - 试图让采用了android的Facebook SDK的朋友 [英] Permissions Error - Trying to get friends using android facebook sdk

查看:105
本文介绍了权限错误 - 试图让采用了android的Facebook SDK的朋友的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要一个功能添加到我的Andr​​oid应用程序,允许用户在签入与其他人标记的签入。 我有签入法的工作没有问题,可以通过添加用户ID作为参数(见下文code)

I am trying to add a feature to my android app that allows users to "checkin" with other people tagged to the checkin. I have the checkins method working no problem and can tag some one by adding the user ID as a parameter (see code below)

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用户可以选择这反过来又会给我的ID在上面的postLocationTagged的方法来使用。

This works fine (I've posted it in case it is of help to anyone else!), the problem i am having is i am trying to create a list of the users friends so they can select the friends they want to tag. I have the method getFriends (see below) which i am then going to use to generate an AlertDialog that the user can select from which in turn will give me the id to use in the above "postLocationTagged" method.

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();
    }
}

当我看着在记录响应记载:

When i look at the response in the log it reads:

得到的反响:{错误:{类型:OAuthException,消息:(#200)权限错误}}

"got responce: {"error":{"type":"OAuthException", "message":"(#200) Permissions error"}}"

我已经通过graphAPI文档看上去并寻找类似的问题,但都没有用!我不知道我是否需要申请额外权限的应用程序,或者如果这是后话你只是不允许做!任何帮助/建议,将不胜AP preciated。

I have looked through the graphAPI documentation and searched for similar questions but to no avail! I'm not sure if i need to request extra permissions for the app or if this is something your just not allowed to do! Any help/suggestions would be greatly appreciated.

推荐答案

解决方案是发出请求到Facebook的图形API何时实现RequestListener。我有新getFriends()方法(见下文),它使用AsyncGacebookRunner来请求数据

The solution is to implement a RequestListener when making the request to the Facebook graph API. I have the new getFriends() method (see below) which uses the AsyncGacebookRunner to request the data.

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类的要求;

The AsyncFacebookRunner makes the the request using the custom FriendsRequestListener (see below) which implements the RequestListener class;

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();
                }
            }
        });
    }

随意使用任何此类code在自己的项目,或询问任何问题了。

Feel free to use any of this code in your own projects, or ask any questions about it.

这篇关于权限错误 - 试图让采用了android的Facebook SDK的朋友的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆