Получить чтение и публикацию разрешений в одном запросе

Прежде чем вы все скажете, что это невозможно, откройте приложение Spotify и нажмите кнопку с кнопкой Facebook.

Мне интересно, как они это сделали, и как я могу получить «publish_stream» и базовые разрешения / электронную почту в одном запросе.

Кроме того, возможно ли возобновить сеанс Facebook с помощью SDK Facebook, если у меня есть определенная информация с последнего сеанса (в последний раз, когда они использовали приложение)?

РЕДАКТИРОВАТЬ- СРЕДНЕСРОЧНЫЕ НИЖЕ ДЛЯ МУЗЫКАЛЬНОГО АВЕРТА

Spotify magic

Solutions Collecting From Web of "Получить чтение и публикацию разрешений в одном запросе"

То, что вы видели на Spotify, не является результатом publish_stream Что они использовали, это Open Graph

Открытые графические концепции включают интеграцию действий приложения с сообщением о деятельности FB и обмен ими с пользователями через приложение, которое они используют. Узнайте больше об этом по указанной ссылке.


Редактирование Объяснение : Проверьте разрешения Open Graph

Пример активности:

 public class MainActivity extends Activity implements StatusCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OpenRequest open = new OpenRequest(this); open.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); open.setPermissions(Arrays.asList(new String[]{"email", "publish_actions", "user_birthday", "user_hometown"})); open.setCallback(this); Session s = new Session(this); s.openForPublish(open); } @Override public void call(Session session, SessionState state, Exception exception) { } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(Session.getActiveSession()!=null) Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } } 

Это действие покажет это (если пользователь не вошел в систему):

Введите описание изображения здесь

В моем приложении я создал экземпляр для OpenRequest, и я установил для него разрешения.

 Session currentSession = Session.getActiveSession(); if (currentSession == null || currentSession.getState().isClosed()) { Session session = new Session.Builder(context).build(); Session.setActiveSession(session); currentSession = session; } if (currentSession.isOpened()) { //Do whatever u want. User has logged in } else if(!currentSession.isOpened()) { //Ask for username and password OpenRequest op = new Session.OpenRequest(context); op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); op.setCallback(null); List<String> permissions = new ArrayList<String>(); permissions.add("publish_stream"); op.setPermissions(permissions); Session session = new Builder(InvitePartners.this).build(); Session.setActiveSession(session); session.openForPublish(op); } 

Это может быть полезно для вас.

Я просто задал его отдельно в методе onCreate.

  LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); authButton.setPublishPermissions("publish_actions"); authButton.setFragment(this); Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, Arrays.asList("read_stream")); Session.getActiveSession().requestNewReadPermissions(newPermissionsRequest); 

Перейдите в панель приложений вашего приложения. Затем нажмите «Изменить приложение». Теперь в левой части страницы u появится Permission . Щелкните его. Придет новая страница. Узнать User & Friend Permissions: поле. Здесь введите publish_actions . Теперь сохраняйте.

Теперь из вашего приложения для Android вы можете публиковать историю в facebook по логину только один раз. Я имею в виду, просто войдите с помощью LoginButton и попробуйте что-то сделать. он должен работать.

Дайте мне знать, что произойдет.

Для всех, кто интересуется второй частью моего вопроса:

Чтобы снова открыть сеанс Facebook с помощью SDK для Facebook, используйте этот код.

 if(Session.openActiveSession(this) == null) { //Haven't logged in yet openSessionForRead(getString(R.string.app_id), Arrays.asList("email")); } 

Facebook кэширует токен.