在你们都说不可能之前,打开Spotify应用并点击“使用Facebook登录”按钮。
我想知道他们是如何做到的,以及如何在一个请求中获取“publish_stream”和基本权限/电子邮件。
另外,如果我有上一个会话的某些信息(上一次使用应用程序的时间),是否可以使用Facebook SDK重新打开Facebook会话?
编辑 -下面是针对音乐广告的屏幕截图
在你们都说不可能之前,打开Spotify应用并点击“使用Facebook登录”按钮。
我想知道他们是如何做到的,以及如何在一个请求中获取“publish_stream”和基本权限/电子邮件。
另外,如果我有上一个会话的某些信息(上一次使用应用程序的时间),是否可以使用Facebook SDK重新打开Facebook会话?
编辑 -下面是针对音乐广告的屏幕截图
你在Spotify看到的内容并不是通过publish_stream
实现的,他们使用的是Open Graph。
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);
}
}
如果用户未登录,此活动将显示以下内容:
publish_actions
权限。我将编辑此答案并添加一个测试。 - Sherif elKhatib在我的应用程序中,我创建了一个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);
}
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);
前往您的应用程序仪表板。然后点击编辑应用程序。现在在页面的左侧,您将看到权限
。点击它。会出现一个新页面。找到用户和好友权限:
框。在此处输入publish_actions
。现在保存。
现在,从您的Android应用程序中,您可以通过仅登录一次来发布故事到Facebook。我的意思是,只需使用LoginButton
登录,然后尝试发布一些内容。它应该可以工作。
让我知道发生了什么。
LoginButton
完成了这个。 - Shoshi对于任何想了解我问题的第二部分的人:
要使用Facebook SDK重新打开Facebook会话,请使用以下代码
if(Session.openActiveSession(this) == null) { //Haven't logged in yet
openSessionForRead(getString(R.string.app_id), Arrays.asList("email"));
}
Facebook 缓存了令牌。