20

在你们都说不可能之前,打开 Spotify 应用程序并点击使用 Facebook 登录按钮。

我想知道他们是如何做到的,以及如何在一个请求中获得“publish_stream”和基本权限/电子邮件。

另外,如果我有上次会话的某些信息(他们上次使用该应用程序),我是否可以使用 Facebook SDK 重新打开 Facebook 会话?

编辑下面的屏幕截图以获取 MUSICALLY AVERT

Spotify 魔术

4

5 回答 5

20

你在 Spotify 上看到的不是publish_stream.What 他们使用的是Open Graph

开放图概念涉及将应用程序的操作与 FB 活动帖子集成,并通过他们使用的应用程序与用户共享。在上述链接中阅读更多相关信息。


编辑说明检查 Open Graph Permissions

示例活动:

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);
    }
}

此活动将显示此内容(如果用户未登录):

在此处输入图像描述

于 2013-03-11T07:19:02.583 回答
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);
}

它可能对你有用。

于 2013-03-11T12:54:12.060 回答
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);
于 2014-05-04T01:06:42.900 回答
0

转到您的应用程序仪表板。然后点击编辑应用。现在在页面的左侧你会看到Permission。点击它。一个新的页面将会到来。找出User & Friend Permissions:框。在这里输入publish_actions。现在保存。

现在从您的 Android 应用程序中,您只需登录一次即可将故事发布到 Facebook。我的意思是,只需使用 登录LoginButton,然后尝试发布一些内容。它应该工作。

让我知道发生了什么。

于 2013-03-04T23:51:06.347 回答
0

对于任何想知道我的问题的第二部分的人:

要使用 Facebook SDK 重新打开 Facebook 会话,请使用此代码

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

Facebook 缓存令牌。

于 2013-03-05T16:07:00.350 回答