2013-02-28 4 views
19

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

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

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

EDIT -SCREENSHOTS НИЖЕ ДЛЯ МУЗЫКАЛЬНО AVERT

Spotify magic

+0

Просто потому, что его возможность для Spotify не означает, что функциональность распространяется на все остальные приложения. Знать любые другие приложения, которые могут открывать сторонние компьютерные приложения непосредственно из FB? –

+0

Вы предлагаете, чтобы Spotify переписывался с Facebook, чтобы компенсировать свои потоковые платежи, и что Цукерберг продвигает партнерство из-за его давно признанной любви к потоковым услугам P2P? ...это безумие. – baconcheese113

+0

Проверьте ответ Виджая. Я отредактировал его. –

ответ

20

Что бы вы видели на Spotify это не результат publish_stream .Что они использовали это Open Graph

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


редактирует Объяснение: Check the Open Graph Permissions

Sample активность:

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

+1

Это правильный ответ. Попробуйте добавить разрешение 'publish_actions', я отредактирую этот ответ и добавлю тест. –

+0

Я точно пытаюсь сделать тот же вход в FB (например, pinterest) с разрешением электронной почты, basic_info, publish_action в одном запросе. Выполненный выше код, но неспособный сделать это ... plz help ... – sanjay

0

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

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

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

+0

Это не похоже на мое мобильное приложение. Я попробовал как собственную реализацию управления сеансом (openSessionForPublish, без разрешения на чтение), так и с инструментами, которые предоставил SDK для Facebook (com.facebook.widget.LoginButton и настройка разрешений на чтение и публикацию). Обе ошибаются, заявляя, что вы не можете запросить оба одновременно. – baconcheese113

+0

просто запросите разрешение на чтение. @ baconcheese113 – Shoshi

+0

Затем он запрашивает только разрешение на чтение. openSessionForRead ("app_id", "permission_list") – baconcheese113

0

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

Чтобы возобновить сеанс с помощью Facebook Использовать SDK facebook этот код

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

Facebook кэширует маркер.

1

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

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

1

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