方法在Android上打开与Facebook的新会话后停止
我正在尝试将我的android应用程序中的一张照片发布到facebook wall,它可以工作,但我需要使用post按钮两次,第一次授权用于登录,第二次授权用于授权我的应用程序 我不知道为什么在请求一个新会话后,例如方法在Android上打开与Facebook的新会话后停止,android,facebook,session,facebook-graph-api,Android,Facebook,Session,Facebook Graph Api,我正在尝试将我的android应用程序中的一张照片发布到facebook wall,它可以工作,但我需要使用post按钮两次,第一次授权用于登录,第二次授权用于授权我的应用程序 我不知道为什么在请求一个新会话后,例如session.openActiveSession(这个,true,回调),我的方法的其余部分停止运行,所以在我再次调用该方法后,它现在请求应用程序权限和post 以下是相关部分: 当我点击post按钮performPublish(PendingAction.post_PHOTO,f
session.openActiveSession(这个,true,回调)代码>,我的方法的其余部分停止运行,所以在我再次调用该方法后,它现在请求应用程序权限和post
以下是相关部分:
当我点击post按钮performPublish(PendingAction.post_PHOTO,false)时调用此选项代码>
这些是其余的,但它们与这个问题无关
@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;
}
}
调用openActiveSession后,方法的其余部分将停止运行,因为打开会话是异步的。因此,在调用openActiveSession之后,会话就没有打开。它启动另一个活动(LoginActivity),提示用户等,然后通过onActivityResult方法返回答案
如果您想在一次单击中处理它,您应该在状态回调中添加一些代码,并检查是否有挂起的发布,如果是,则在该点执行发布
SDK附带的HelloFacebook示例应用程序演示了如何执行此操作。我从HelloFacebook获得了这些代码,但该应用程序仅允许您在登录后发布,然后单击发布按钮,这也是两个步骤,我如何在一个步骤中完成此操作?您没有。(策略)已经要求您分离读取和发布权限的请求,因此已经有2个请求了。建议应用程序在用户首次启动应用程序时请求读取权限,然后在实际需要时请求发布权限。通过这种方式,用户可以理解您为什么要请求这些权限,并且更有可能将这些权限授予您。那么您的意思是没有办法在一个步骤中完成登录和授权?它必须请求两次许可?我在这里有点迂腐,但我说的是你需要分开阅读和发布许可。授权有很多含义,请求读取权限也是授权的一种形式(在这种情况下,您可以在一个步骤中登录并授权)。只是您需要单独请求发布权限。此外,您只需要请求一次发布权限,在用户授予您发布权限后,您不需要再次请求。
@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;
}
}