Подтвердить что ты не робот

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

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

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

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

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

Spotify magic

4b9b3361

Ответ 1

То, что вы видели на 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);
    }
}

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

enter image description here

Ответ 2

В моем приложении я создал экземпляр для 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);
}

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

Ответ 3

Я просто задал его отдельно в методе 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);

Ответ 4

Перейдите в панель приложений. затем нажмите "Изменить приложение". теперь в левой части страницы u появится Permission. щелкните его. придет новая страница. узнайте User & Friend Permissions:. здесь тип publish_actions. теперь сохраняйте.

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

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

Ответ 5

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

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

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

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