I think your KeyHash, which you added to your Facebook account, allows you to share the link. In order to be able to post some things on the user's wall, you must respect this facebook βbest practiceβ: here is my production code that works fine:
private void publishStory(String hash, String title, String user) { Session session = Session.getActiveSession(); if (session != null){ // Check for publish permissions List<String> permissions = session.getPermissions(); if (!isSubsetOf(PERMISSIONS, permissions)) { pendingPublishReauthorization = true; Session.NewPermissionsRequest newPermissionsRequest = new Session .NewPermissionsRequest(getActivity(), PERMISSIONS); session.requestNewPublishPermissions(newPermissionsRequest); return; } Bundle postParams = new Bundle(); postParams.putString("name", title); postParams.putString("caption", "By Recommend Android"); postParams.putString("description", user+" "+"STRONGLY recommends"+" "+title); postParams.putString("link", "http://re.co/"+hash); postParams.putString("picture", "http://re.co/assets/img/useful-exp.png"); Request.Callback callback= new Request.Callback() { public void onCompleted(Response response) { JSONObject graphResponse = response .getGraphObject() .getInnerJSONObject(); String postId = null; try { postId = graphResponse.getString("id"); } catch (JSONException e) { Log.i(TAG, "JSON error "+ e.getMessage()); } FacebookRequestError error = response.getError(); if (error != null) { debug.print("erreur"); } else { debug.print("erreur2"); } } }; Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback); RequestAsyncTask task = new RequestAsyncTask(request); task.execute(); } } private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { for (String string : subset) { if (!superset.contains(string)) { return false; } } return true; }
source share