权限错误 – 尝试使用android facebook sdk获取朋友
我正在尝试为我的Android应用添加一项function,允许用户“签入”其他标记为签到的人。 我有checkins方法没有问题,可以通过添加用户ID作为参数标记一些(见下面的代码)
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”方法中使用的id。
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(); } }
当我查看日志中的响应时,它会显示:
“得到回应:{”错误“:{”type“:”OAuthException“,”message“:”(#200)权限错误“}}”
我查看了graphAPI文档并搜索了类似的问题,但无济于事! 我不确定是否需要为应用程序请求额外的权限,或者这是您不允许做的事情! 任何帮助/建议将不胜感激。
您可能需要以下权限:
- user_checkins
- friends_checkins
- read_friendlists
- manage_friendlists
- publish_checkins
检查API文档中的相关内容。 在此之前,请确保哪一行导致此权限错误并尝试修复它。
解决方案是在向Facebook图形API发出请求时实现RequestListener。 我有新的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使用实现RequestListener类的自定义FriendsRequestListener(见下文)发出请求;
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
您可以在自己的项目中使用任何此类代码,或者询问有关它的任何问题。
你可以private static final String[] PERMISSIONS = new String[] {"publish_stream","status_update",xxxx};
xxx是预先提交的