使用CustomTabsIntent完成Facebook登录授权后如何返回应用并获取授权信息
解决方案
你当前的问题核心是没有配置OAuth授权的回调唤起逻辑,Facebook授权完成后无法识别要跳转回你的应用,按以下步骤修改即可:
- 第一步:在Facebook开发者后台的应用登录配置项中,新增OAuth重定向URI,填写你自定义的应用唤起地址,示例为
com.your.app.packagename://fb-login-callback,Scheme建议用你的应用包名避免和其他应用冲突。 - 第二步:在AndroidManifest.xml中为你的登录页Activity添加Deep Link唤起的intent-filter配置:
<activity android:name=".YourLoginActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 和Facebook后台配置的重定向URI参数保持一致 --> <data android:scheme="com.your.app.packagename" android:host="fb-login-callback" /> </intent-filter> </activity>
- 第三步:在登录页Activity的
onCreate和onNewIntent方法中接收Facebook返回的授权参数,再传递给WebView的登录页面处理:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... 原有初始化逻辑 handleAuthCallback(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); handleAuthCallback(intent); } private void handleAuthCallback(Intent intent) { Uri callbackUri = intent.getData(); if (callbackUri != null && callbackUri.getScheme().equals("com.your.app.packagename")) { // 从Uri中取出Facebook返回的授权码、状态码等参数 String authCode = callbackUri.getQueryParameter("code"); String state = callbackUri.getQueryParameter("state"); // 方式1:将参数拼接给WebView的登录页地址加载 webView.loadUrl("你的原有登录页地址?fb_auth_code=" + authCode + "&state=" + state); // 方式2:直接注入JS参数给已加载的登录页面 webView.evaluateJavascript("handleFbAuthCallback('"+authCode+"', '"+state+"')", null); } }
- 补充优化:你原来的Custom Tab启动代码可以去掉
FLAG_ACTIVITY_NEW_TASK配置,避免授权页和你的应用不在同一个任务栈,返回时直接回到你的登录页。
内容的提问来源于stack exchange,提问作者Slava
相关产品推荐
相关产品推荐

