gpt4 book ai didi

android - FB sdk, requestNewPublishPermissions() 不调用任何回调

转载 作者:行者123 更新时间:2023-11-29 16:05:17 26 4
gpt4 key购买 nike

我关注了 FB tutorial一步一步来,我不明白为什么这不起作用。

我所有的 fragment 都继承自 BaseFragment :

public class BaseFragment extends SherlockFragment {
...
protected UiLifecycleHelper _uiHelper;
protected boolean _isResumed = false;

protected static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
protected static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
protected boolean _pendingPublishReauthorization = false;


protected Session.StatusCallback _callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_uiHelper = new UiLifecycleHelper(getSherlockActivity(), _callback);
_uiHelper.onCreate(savedInstanceState);
}

protected void onSessionStateChange(Session session, SessionState state, Exception exception) {}

...(all lifecycle stuff)
}

然后我有一个包含登录/注销按钮的 FacebookLoginFragment:

public class FacebookLoginFragment extends BaseFragment {

protected LoginButton _authButton;
protected ProgressBar _loadingBar;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.facebook_login, container, false);

_loadingBar = (ProgressBar) view.findViewById(R.id.login_progressBar);

_authButton = (LoginButton) view.findViewById(R.id.authFacebookButton);
_authButton.setFragment(this);
_authButton.setReadPermissions(Arrays.asList("email", "user_birthday"));

return view;
}

@Override
protected void onSessionStateChange(Session session, SessionState state, Exception exception) {
super.onSessionStateChange(session, state, exception);

// LogIn process
}
...
}

最后,我有一个 NewsFragment,其中包含提要的 ListView 。每个提要都是可共享的。当我们单击提要的共享按钮时,适配器会调用 NewsFragment.publishFeed(feed) 方法。

public class NewsFragment extends BaseFragment{
...
protected Feed _feedPendingPublish;

@Override
// => NEVER CALLED
protected void onSessionStateChange(Session session, SessionState state, Exception exception) {
super.onSessionStateChange(session, state, exception);

if (_isResumed) {

if (_pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
_pendingPublishReauthorization = false;
if(_feedPendingPublish != null){
publishFeed(_feedPendingPublish);
_feedPendingPublish = null;
}
}
}
}

public void publishFeed(Feed feed){

if(_pendingPublishReauthorization){
return;
}

Session session = Session.getActiveSession();

if (session != null){

// If permission doesn't exist, ask and return. Otherwise, send request

List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
_pendingPublishReauthorization = true;
_feedPendingPublish = feed;

Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(getSherlockActivity(), PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);

return;
}

// DO stuff
}
}
}

问题是发布授权后没有调用 NewsFragment 回调。 (既不是 BaseFragment,也不是 FacebookLogin)。请注意,这两个 fragment 都存在于同一 Activity 中。

我正在使用 facebook-android-sdk-3.5.2

最佳答案

我终于明白了。正如很多人所说,这是一个 onActivityResult() 的问题,但相当恶毒。

登录时,成功调用了 FacebookLoginFragment.onSessionStateChange(),而在权限过程中从未调用过 NewsFragment.onSessionStateChange()

经过几次测试,我认为这是由于静态和动态绑定(bind)造成的。我的 FacebookLoginfragment 在 xml 中直接引用(静态),而我的 NewsFragment 是在源代码中动态添加的。因此,包含两个 fragment 的 Activity 仅将 onActivityResult 信号发送到 FacebookLoginFragment。因此,从未调用触发回调所需的 NewsFragment.onActivityResult()

重写 Activity.onActivityResult() 给我预期的行为:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
getSupportFragmentManager().findFragmentById(R.id.my_fragment_frame).onActivityResult(requestCode, resultCode, data);
}

关于android - FB sdk, requestNewPublishPermissions() 不调用任何回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com