简短的版本是您对如何在 Android 应用程序中实现 OAuth 流程是正确的。概括地说,您的应用程序将:
- 运行 InitializeOAuth Choreo
- 打开一个 WebView,指向 InitializeOAuth 返回的授权 URL
- 用户在 WebView 中单击“允许”后,运行 FinalizeOAuth Choreo 以检索访问令牌
上面 #3 的技巧是能够在 Android 中注册自定义 URL 处理方案,使用“意图过滤器”。在您的 AndroidManifest.xml 文件中,您需要使用如下代码为您的一项活动分配一个自定义意图过滤器:
<activity android:name=".MyOAuthActivity">
<intent-filter>
<action android:name = "android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="temboo" android:host="twitter" />
</intent-filter>
</activity>
这段代码的意思是,如果您的应用程序接收到对诸如“temboo://twitter”之类的 url 的请求,那么该请求将自动转发到您指定的 Activity——在本例中为 MyOAuthActivity。
当您运行 InitializeOAuth Choreo 时,您需要指定“temboo://twitter”(或您使用的任何自定义意图方案)作为“转发 URL”输入。这将导致 Temboo 在用户单击 OAuth 网络视图中的“允许”后将请求转发回您的活动。
在您的活动中,您可以使用自定义方案拦截 URL,代码如下:
// Find the webview, and make sure Javascript is enabled.
WebView webview = (WebView)findViewById(R.id.oauthWebview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
// Here we override the onPageStarted method of the webview. If Twitter authorization
// succeeds, we'll be redirected to a URL that looks like temboo://twitter
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(url.startsWith("temboo://")) {
handled = true;
// We got forwarded here from the 3rd party OAuth approval page; proceed
// to next step
Log.i("Temboo", "Got callback!");
Intent i = new Intent(getBaseContext(), FinalizeOAuthActivity.class);
i.putExtra("callbackID", callbackID);
startActivity(i);
}
}
});
webview.loadUrl(authorizationURL);`
顺便说一下,我在 Temboo 工作,所以如果您有任何其他问题,请随时与我们联系。