来自fabric的Twitter登录在片段中不起作用
Posted
技术标签:
【中文标题】来自fabric的Twitter登录在片段中不起作用【英文标题】:Twitter Login from fabric doesn't work in fragments 【发布时间】:2015-10-26 07:20:26 【问题描述】:授权完成,但出现错误
10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: com.twitter.sdk.android.core.TwitterAuthException:授权失败。 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: 在 com.twitter.sdk.android.core.identity.TwitterAuthClient.handleAuthorize(TwitterAuthClient.java:110) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: 在 com.twitter.sdk.android.core.identity.TwitterAuthClient.authorize(TwitterAuthClient.java:101) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: 在 com.twitter.sdk.android.core.identity.TwitterLoginButton$LoginClickListener.onClick(TwitterLoginButton.java:161) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: 在 android.view.View.performClick(View.java:5198) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 android.view.View$PerformClick.run(View.java:21147) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 android.os.Handler.handleCallback(Handler.java:739) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 android.os.Handler.dispatchMessage(Handler.java:95) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 android.os.Looper.loop(Looper.java:148) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 android.app.ActivityThread.main(ActivityThread.java:5417) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 java.lang.reflect.Method.invoke(本机方法)10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter:在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 10-26 11:58:33.404 7456-7456/com.idfcwalletapp.idfc_wallet E/Twitter: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我的片段代码是:
public class FragmentSample extends Fragment
private TwitterLoginButton loginButton;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View rootView=inflater.inflate(R.layout.fragment_sample,container,false);
loginButton = (TwitterLoginButton)rootView. findViewById(R.id.twitter_login_button);
return rootView;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(getActivity(), new Twitter(authConfig));
loginButton.setCallback(new Callback<TwitterSession>()
@Override
public void success(Result<TwitterSession> result)
// The TwitterSession is also available through:
// Twitter.getInstance().core.getSessionManager().getActiveSession()
TwitterSession session = result.data;
// TODO: Remove toast and use the TwitterSession's userID
// with your app's user model
String msg = "@" + session.getUserName() + " logged in! (#" + session.getUserId() + ")";
Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
@Override
public void failure(TwitterException exception)
Log.d("TwitterKit", "Login with Twitter failure", exception);
);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
loginButton.onActivityResult(requestCode, resultCode, data);
【问题讨论】:
在容器活动的后续更改后,它现在正在工作。 FragmentSample 片段 = 新的 FragmentSample(); android.support.v4.app.FragmentTransaction 事务 = getSupportFragmentManager().beginTransaction(); // transaction.add(R.id.more_activity_container, fragment).commit(); transaction.replace(R.id.more_activity_container, fragment, TAG_PROFILE_FRAGMENT) .addToBackStack(null) .commit(); 其中 TAG_PROFILE_FRAGMENT 可以是任何唯一标志。我把它作为私有静态最终字符串 TAG_SAMPLE_FRAGMENT = "sampleFragment"; 【参考方案1】:虽然迟到是解决办法。
片段的onActivityResult 不会被直接调用。它调用调用片段的活动的 onActivityResult。因此,首先在您的活动上覆盖 onActivityResult,如下所示,
fragment = getSupportFragmentManager().findFragmentByTag(title);
if (fragment != null)
fragment.onActivityResult(requestCode, resultCode, data);
希望它有效:)
【讨论】:
以上是关于来自fabric的Twitter登录在片段中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 登录在 Twitter iOS 应用程序中不起作用
如何使用fabric从twitter webview中检索登录回调
如何在 iOS 中使用 Twitter Kit/Fabric 从登录用户获取用户个人资料图片
在我的 Android 应用程序中,将数字(通过 Twitter 的 Fabric)升级到 2.0.0 版后,数字主题不起作用