Я пытаюсь поделиться фотографией с Android через Facebook SDK, но когда я пытаюсь запросить разрешения publish_actions для открытого сеанса, Facebook возвращает обратно с отказом в разрешении, не показывая экран с запросом на публикацию от вашего имени. Почему это? и как я могу это решить? Кстати, я не получаю никаких ошибок или что-то не так в журнале.
Вот мой код:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
public void onShareFacebook() {
progressDialog.show();
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()){
LoginButton loginFacebookButton = new LoginButton(this);
loginFacebookButton.setPublishPermissions(PERMISSIONS);
loginFacebookButton.performClick();
pendingShare = true;
}
else if (session != null && session.isOpened()){
facebookSharePhoto();
}
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
if (pendingPublishReauthorization &&
state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
pendingPublishReauthorization = false;
onShareFacebook();
}
else if (pendingShare){
onShareFacebook();
}
}
}
private void facebookSharePhoto(){
pendingShare = false;
Bitmap screenshotImage = takeScreenShot();
String message = invokeEvent.name;
postPhoto(screenshotImage, message, callbackShareFacebook);
}
private void postPhoto(Bitmap image, String message, Request.Callback callback) {
Session session = Session.getActiveSession();
if (session != null){
// Check for publish permissions
List<String> permissions = session.getPermissions();
List<String> permissionsd = session.getDeclinedPermissions();
if (isSubsetOf(permissionsd, PERMISSIONS)){
Toast.makeText(this, "Permisos denegados", Toast.LENGTH_SHORT).show();
onBackPressed();
return;
}
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
Bundle postParams = new Bundle();
postParams.putString("name", message);
Log.d(TAG, "inicio getImageAsData");
postParams.putByteArray("picture", getImageAsData(image));
Log.d(TAG, "fin getImageAsData");
Request request = new Request(session, "me/photos", postParams, HttpMethod.POST, callback);
Request.executeBatchAsync(request);
}
}
В начале я вызываю функцию:
session.requestNewPublishPermissions(newPermissionsRequest);
Но когда обратный вызов возвращается, для сеанса здесь отказано в разрешении «publish_actions»:
List<String> permissionsd = session.getDeclinedPermissions();
if (isSubsetOf(permissionsd, PERMISSIONS)){
Toast.makeText(this, "Permisos denegados", Toast.LENGTH_SHORT).show();
onBackPressed();
return;
}