2016-07-08 46 views
4

我開始調查如何以編程方式使用Facebook。facebook redirect_uri設置爲ios URL計劃

我在我的應用程序中設置了URL方案,以便我可以使用「myappopenup://」在瀏覽器中打開它。

然後我在Facebook上創建了一個應用程序。複製一個AppID,並試圖使像這樣:

let url = NSURL(string: "https://www.facebook.com/dialog/oauth?client_id={MY_APP_ID_WAS_HERE}&redirect_uri=myappopenup://fbcallback") 
UIApplication.sharedApplication().openURL(url!) 

運行此代碼後,模擬器打開Safari瀏覽器(我已經試過SFSafariViewController第一)。但我看到的一切都是:

enter image description here

所以,我想知道:是否有可能從Facebook的OAuth的,以我的應用程序重定向?

+0

不,它不是。對於本機移動應用程序,您應該使用Facebook提供的SDK來處理登錄。 – CBroe

回答

7

是的,這是可能的。這裏有必要REDIRECT_URI

https://graph.facebook.com/oauth/authorize 
    ?response_type=token 
    &client_id='+'1247676148624015 
    &redirect_uri=fb1247676148624015://authorize 

確保您的Facebook應用程序設置:

Facebook App Setup

,並確保您的自定義URL方案設置:

enter image description here

以上令人失望的評論 - 可能誤導了許多人即雖然這些東西沒有很好的記錄。

+1

只有一個問題:在developers.facebook.com上的Facebook登錄部分提供了有效OAuth重定向URI時,類似這樣的值似乎被拒絕爲無效。我試過'fb ://授權'。錯誤信息是「出錯了,我們正在努力盡快解決問題。」錯誤代碼(來自HTTP流量)爲'1357010',但該代碼沒有在線記錄。 – Tom

+0

該解決方案似乎不再適用。任何見解,亞歷克斯? – Tom

+2

順便說一句,你*必須*(看起來)使用'authorize'路徑,你不能使用另一個自定義路徑,並期望這個工作。在這個細節上浪費了幾個小時。 – Jason

1

我設法讓Alex Paterson解決方案在這裏工作。我也必須在Facebook登錄設置上添加redirect_uri網址。在部分有效的OAuth重定向的URI我已經添加了回調URL是這樣的:

https://graph.facebook.com/oauth/authorize? 
response_type=token& 
client_id=12345678910& 
redirect_uri=fb12345678910://authorize 
+0

你的意思是整個「https://graph.facebook ...」url還是隻是redirect_uri(fb ...)? – Toshkuuu

+0

@Toshkuuu Facebook上的整個URL Developers配置。 –

0

由於一些其他的答案&評論表明的,我不認爲你正在試圖做的是支持通過Facebook - 我的印象是,他們真的希望你使用FBSDK來完成身份驗證,並從Facebook接收令牌。

感覺就像我已經在someapp://authorize策略下嘗試了太陽下的所有可能的配置,但是看起來好像他們只希望你爲web應用做這些。

我與構建反應本地(所以這可能並不直接適用。我敢肯定,OBJ-C在實踐中是有幾分相似),所以我用了react-native-fbsdk庫暴露LoginButtonAccessToken成分,你可以這樣使用它們:

  <LoginButton 
      readPermissions={["email", "public_profile"]} 
      onLoginFinished={ 
      (error, result) => { 
      if (error) { 
       alert("Login failed with error: " + result.error); 
      } else if (result.isCancelled) { 
       alert("Login was cancelled"); 
      } else { 
       AccessToken.getCurrentAccessToken().then((data) => { 
        const token = data.accessToken; 
        // send the token to your backend 
       } 
      ) 
       alert("Login was successful with permissions: " + result.grantedPermissions) 
      } 
      } 
     } 
     onLogoutFinished={() => alert("User logged out")} 
     />