2

我需要允许我的应用在用户的 Facebook 和 Twitter 墙上发布某些消息。这个想法就像呈现一个按钮一样简单,一旦用户点击它,他就会被要求登录他的 Facebook 帐户(无论方式如何)并授予我的应用程序编写权限,我的应用程序将能够发布一个某些消息(或者至少我的应用程序应该能够检查用户是否稍后发布了该消息)。带有另一个按钮的 Twitter 也是如此。

Facebook SDK 和 Twitter SDK for Android 一开始看起来太吓人了,我只想在用户单击按钮时登录并发布消息。我一直在研究,Temboo 库真的很有前途。我已经对其进行了测试,我可以毫无问题地在 Facebook 和 Twitter 上发布,并提供我自己帐户的凭据。问题是允许用户在自己的帐户中发布的登录步骤。

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

4

1 回答 1

2

简短的版本是您对如何在 Android 应用程序中实现 OAuth 流程是正确的。概括地说,您的应用程序将:

  1. 运行 InitializeOAuth Choreo
  2. 打开一个 WebView,指向 InitializeOAuth 返回的授权 URL
  3. 用户在 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 工作,所以如果您有任何其他问题,请随时与我们联系。

于 2013-12-19T15:30:36.170 回答