我正在尝试将我的Android应用程序中的照片发布到Facebook墙上,它可以工作,但我需要使用两次发布按钮,第一次授权用于登录,第二种授权用于授权我的应用。
我不知道为什么在请求新会话后,即Session.openActiveSession(this, true, callback);
,我的方法的其余部分停止运行,所以在我再次调用该方法后,它现在请求app权限并发布< / p>
以下是关注的部分:
点击发布按钮performPublish(PendingAction.POST_PHOTO, false);
private void performPublish(PendingAction action, boolean allowNoSession) {
// check for log in first
if (Session.getActiveSession() == null || Session.getActiveSession().isClosed()) {
Session.openActiveSession(this, true, callback);
}
// the method stops here
Session session = Session.getActiveSession();
if (session != null) {
pendingAction = action;
if (hasPublishPermission()) {
// We can do the action right away.
handlePendingAction();
return;
} else if (session.isOpened()) {
// We need to get new permissions, then complete the action when we get called back.
session.requestNewPublishPermissions(new Session.NewPermissionsRequest(this, "publish_actions"));
return;
}
}
if (allowNoSession) {
pendingAction = action;
handlePendingAction();
}
}
其余部分,但它们与此问题无关
@SuppressWarnings("incomplete-switch")
private void handlePendingAction() {
PendingAction previouslyPendingAction = pendingAction;
// These actions may re-set pendingAction if they are still pending, but we assume they
// will succeed.
pendingAction = PendingAction.NONE;
switch (previouslyPendingAction) {
case POST_PHOTO:
postPhoto();
break;
}
}
private boolean hasPublishPermission() {
Session session = Session.getActiveSession();
return session != null && session.getPermissions().contains("publish_actions");
}
private void postPhoto() {
if (hasPublishPermission()) {
//if (Session.getActiveSession().getPermissions().contains("publish_actions") && (Session.getActiveSession() != null || Session.getActiveSession().isOpened()))
showLoading();
Request request = Request.newUploadPhotoRequest(Session.getActiveSession(), myBm, new Request.Callback() {
@Override
public void onCompleted(Response response) {
hideLoading();
showPublishResult("photo_post", response.getGraphObject(), response.getError());
//Toast.makeText(getApplicationContext(), "Photo successfully uploaded to Facebook.", Toast.LENGTH_SHORT).show();
}
});
Bundle parameters = request.getParameters();
// photo's description
if (moment.name != null)
parameters.putString("message",moment.name);
request.setParameters(parameters);
request.executeAsync();
}
else {
pendingAction = PendingAction.POST_PHOTO;
}
}
答案 0 :(得分:1)
在调用openActiveSession之后,其余方法将停止运行,因为打开会话是异步的。因此,在您调用openActiveSession之后,会话未打开。它启动另一个活动(LoginActivity),提示用户等,然后通过onActivityResult方法返回答案。
如果您想一键处理它,您应该在状态回调中添加一些代码,并检查是否有待发布的发布,如果是,请在那时进行发布。
SDK附带的HelloFacebook示例应用程序演示了如何执行此操作。