2009-07-18 50 views
5

我正在開發一款iPhone應用程序,該應用程序最好使用OAuth與Twitter進行通信。我知道很多人使用UIWebView在他們的應用程序內部執行OAuth工作流程,但我不同意這一點,並且正在使用Pownce approach如何讓Twitter API使用OAuth尊重回調參數?

問題是,Twitter使用針號與桌面應用程序一起工作的整個方案。當我在Twitter上註冊我的應用程序時,他們有一個Web表單詢問我是否是桌面或Web客戶端。如果我選擇桌面客戶端,當我嘗試讓用戶授權時,我可以設置oauth_callback參數,但Twitter會在授權後忽略它並顯示一個PIN碼。如果在twitter的形式中,我指定我是一個Web客戶端,它需要我輸入一個URL以在授權後重定向。而且,由於我使用的是iPhone應用專用的url方案,因此它們的Web表單驗證失敗,因爲它似乎只接受符合HTTP協議的URL。

所以,好像我卡住了 - 我不能說「桌面」,因爲我不想打擾針,我不能說「網絡」或我不能使用iPhone應用程序URL。任何解決方案?

回答

8

從你的問題:

我知道很多人都在做使用一個UIWebView他們的應用程序內的OAuth的認證流程,但我不同意這種說法,並正在與方法的Pownce去。

Pownce文章指出,退出應用程序並打開Mobile Safari執行身份驗證步驟存在問題,並且他們開始因爲這樣做而收到用戶的不良評論。他們也經歷了大約40%的失敗率。

Pownce的解決方案是在你的應用程序中使用UIWebView,所以我有一種感覺,你可能誤解了他們的建議。話雖如此,他們確實將其標記爲「天真」的解決方案,並繼續提出一系列理論上的「理想」解決方案。

您可能還沒有意識到的另一點是,桌面應用程序(使用「帶外」/ pin number方法) Web應用程序需要在嵌入式或外部瀏覽器中打開Twitter網站。

所以,你有iPhone上的兩種選擇:

  1. 在一個UIWebView打開twitter.com,不指定任何oauth_callback參數或oauth_callback=oob啓動基於銷出帶外流量。然後,用戶需要使用iPhone的複製粘貼功能複製該引腳,手動關閉UIWebView並將該引腳粘貼到應用程序中。然後該引腳可以被轉換爲訪問令牌。
  2. 這樣做是否每個人都這樣做(回調參數中的UIWebView + custom-uri://foo.bar)。

出於顯而易見的原因,第一個選項非常糟糕,而且只在Twitter無法重定向到自定義URI的平臺上纔有用。

+0

我確實看到了40%的數字,但不確定我是否同意邁克的結論。實際上,我是其中一位適合40%的人,因爲我下載了Pownce iPhone應用程序,然後記得我並沒有真正使用Pownce。 看起來我不得不採取你的方法#2雖然,這似乎是不幸的。 – bpapa 2009-07-19 15:04:59

0

一個簡單的解決方案可能是創建一個總是發送301重定向到您的自定義URL方案,然後將該HTTP URL提供給twitter web API的HTTP頁面。

除此之外,Nathan的答案非常完整。

0

以下是我的工作方式:告訴Twitter您是一個Web應用程序,並在註冊您的oauth客戶端時組成任何舊的HTTP:// URL以滿足Twitter。

然後在您的應用程序中,在回調參數中傳遞您想要的URL。 Twitter(以我的經驗)使用你給它的那個。

0

您可以使用中間網站進行身份驗證。你的應用程序創建一個唯一的ID(基於硬件?)並存儲它。然後記錄它已經發送用戶進行認證並將唯一的ID發送到您的網站。然後它將用戶重定向到您的網站。然後您的網站使用oAuth將用戶發送到Twitter。用戶返回到您的網站,並將唯一標識標記爲已認證並存儲認證信息。用戶重新啓動iPhone上的應用程序,它讀取它已發送用戶進行身份驗證,並與唯一ID聯繫您的網站 - 並讀取身份驗證信息。

囉嗦,需要另一個網站,但它應該工作。