AndroidでFacebook SDKを扱おうとしています。今のところ、ユーザーのフィード (me/feed) への投稿は完了しており、正常に動作しています。ユーザー認証後、私のアプリケーションは manage_pages パーミッションを受け取り、管理者権限を持つグループを保存するようユーザーに提案します。
private void requestPermissions() {
List<String> permissions = session.getPermissions();
final List<String> PERMISSIONS = Arrays.asList("publish_actions",
"manage_pages");
if (!isSubsetOf(PERMISSIONS, permissions)) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
myActivity, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
};
後でユーザーは投稿するグループを選択できます。その後、アプリケーションはページ アクセス トークンを取得するリクエストを行い、投稿を開始します。
private void postToGroup() {
if (session != null) {
Log.d("FB", "groupToken request!");
Request myreq = Request.newGraphPathRequest(session, "me/accounts",
new Request.Callback() {
@Override
public void onCompleted(Response response) {
Log.d("FB", "received token");
GraphObject obj = response.getGraphObject();
JSONObject json = obj.getInnerJSONObject();
try {
String token = null;
JSONArray data = json.getJSONArray("data");
Log.d("FB", frag.getAcc().getLogin());
for (int i = 0; i < data.length(); i++) {
JSONObject acc = (JSONObject) data.get(i);
Log.d("FB", acc.getString("id"));
if (acc.getString("id").equals(
frag.getAcc().getLogin())) {
Log.d("FB",
"token finded! "
+ acc.getString("access_token"));
token = acc.getString("access_token");
}
}
Log.d("FB", token);
executeRequest(token);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
myreq.executeAsync();
} else {
Log.d("FB", "Session is closed");
}
}
executeRequest メソッドは次のとおりです。
private void executeRequest(String token) {
postParams = new Bundle();
postParams.putString("name", postTitle);
postParams.putString("message", frag.getContent());
postParams.putString("access_token", token);
request = new Request(session, frag.getAcc()
.getLogin() + "/feed", postParams, HttpMethod.POST,
callback);
Log.d("FB", "Executing post request");
request.executeAsync();
}
そしてそれに対するコールバック:
private Request.Callback callback = new Request.Callback() {
public void onCompleted(Response response) {
Log.d("FB", "get response!");
FacebookRequestError error = response.getError();
if (error == null) {
JSONObject graphResponse = response.getGraphObject()
.getInnerJSONObject();
String postId = null;
try {
postId = graphResponse.getString("id");
Log.d("FB", postId);
} catch (JSONException e) {
Log.d("FB error", "JSON error " + e.getMessage());
}
} else {
Log.d("FB error", error.getErrorMessage()); //HERE I'M RECEIVING AN ERROR
}
}
};
そして、投稿を試みた後、「ユーザーはアプリケーションがこのアクションを実行することを承認していません」というエラーが表示されます。この場合、正しいリクエストに対処するのを手伝ってください。または、生のGraph curlリクエストを作成する必要がありますか? これで約2週間頭をかきむしっていますが、見つかった情報は「ページアクセストークンを使用する必要があります」だけです。しかし、それを正しく使用する方法は?ありがとう。