我需要允许我的应用在用户的Facebook和Twitter墙上张贴某些消息。这个想法就像显示一个按钮一样简单,一旦用户单击它,就要求他登录他的Facebook帐户(无论如何)并给我的应用程序编写特权,然后我的应用程序就可以发布特定消息(或者至少我的应用应该能够检查用户是否稍后发布了该特定消息)。对于Twitter,带有另一个按钮也是如此。

起初,用于Android的Facebook SDK和Twitter SDK似乎太吓人了,我只想登录并在用户单击按钮时发布消息。我一直在研究,Temboo库确实很有前途。我已经对其进行了测试,并且能够提供自己帐户的凭据,而不会出现任何问题,可以在Facebook和Twitter上发布。问题是登录步骤允许用户在自己的帐户中发布。

按照Temboo的过程,我尝试使用Choreos的InitializeOAuth和FinalizeOAuth。如果我没记错的话,InitializeOAuth返回必须提供给用户的回调URL,以允许我的应用发布或执行任何操作。但是如何?我是否需要在Web视图中加载该URL,然后检测用户何时在Web视图中登录?我不知道。 Temboo网站和强大的功能似乎令人赞叹,但是文档中缺少一个示例,该示例不如Facebook或Android中的Twitter或Twitter中的整个身份验证过程有用...:'(

最佳答案

简短的版本是您对在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”,则该请求将自动转发到您指定的活动(在本例中为MyOAuthActivity)。

当您运行InitializeOAuth Choreo时,您需要将“ temboo:// twitter”(或您使用的任何自定义意图方案)指定为“转发URL”输入。用户单击OAuth Web视图中的“允许”后,这将导致Temboo将请求转发回您的活动。

然后,在“活动”中,您可以使用自定义方案拦截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工作,请随时与您联系。

10-07 20:07
查看更多