使用 Facebook-Android SDK 3.0 正确请求发布权限
Posted
技术标签:
【中文标题】使用 Facebook-Android SDK 3.0 正确请求发布权限【英文标题】:Properly Requesting Publish Permissions using Facebook-Android SDK 3.0 【发布时间】:2013-08-15 08:27:03 【问题描述】:我正在研究一种设置,用户可以选择将他们在我的应用上的帖子自动发布到 Facebook 上。
我找到了这个例子:https://github.com/fbsamples/android-3.0-howtos/blob/master/PublishFeedHowTo/src/com/facebook/samples/publishfeedhowto/MainFragment.java
但是,由于此功能是我的应用程序中的一项设置,因此我需要将“允许权限”逻辑与发生在另一个单独活动上的实际“发出发布请求”逻辑分开。
乍一看,我认为我可以将下面的代码块剪切并粘贴到我的活动中,并且假设我的用户已经使用 facebook 登录它会起作用,但显然我还必须实现 uihelpers 和 Session.StatusCallback's 。我需要在请求权限的设置活动中实现哪些额外代码(除了下面的逻辑)?
private void publishStory()
Session session = Session.getActiveSession();
if (session != null)
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions))
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset)
for (String string : subset)
if (!superset.contains(string))
return false;
return true;
【问题讨论】:
您不需要使用 uiHelpers,我认为您需要在代码中添加一个 Session.Callback 到您的 newPermissionsRequest 以在它被调用时执行实际发布(当然,在您的回调中执行另一个 isSubsetOf 检查,因为用户可能拒绝了您的请求)。也不要忘记覆盖调用活动/片段中的 onActivityResult 方法。 【参考方案1】:正如李明在评论中指出的那样,您不需要实现uihelpers
,但您还需要以下内容。
实现StatusCallback
private Session.StatusCallback statusCallback = new SessionStatusCallback();
private class SessionStatusCallback implements Session.StatusCallback
@Override
public void call(final Session session, SessionState state, Exception exception)
if (session.isOpened())
switch (state)
case OPENED_TOKEN_UPDATED:
publishStory(); // Comes here after the new permissions are requested
break;
实现onActivityResult()
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
在publishStory()
中添加代码来做真正的工作
private void publishStory()
Session session = Session.getActiveSession();
if (session != null)
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions))
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
// Do the real work here
...
【讨论】:
我认为我们还必须添加这一行:newPermissionsRequest.setCallback(statusCallback);以上是关于使用 Facebook-Android SDK 3.0 正确请求发布权限的主要内容,如果未能解决你的问题,请参考以下文章
iPhone SDK 3.2 测试版和 iPhone SDK 3.1.2
从带有AIR SDK 3.9的Adobe Flex SDK 4.6迁移到带有AIR SDK 3.9的Apache Flex SDK 4.12.0