【问题标题】:facebook redirect_uri set to ios URL Schemefacebook redirect_uri 设置为 ios URL Scheme
【发布时间】:2016-07-08 07:26:22
【问题描述】:

我开始研究如何以编程方式使用 Facebook。

我在我的应用中设置了 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)。但我看到的都是:

所以,我想知道:是否可以从 Facebook oauth 重定向到我的应用?

【问题讨论】:

  • 不,不是。对于原生移动应用,您应该使用 Facebook 提供的 SDK 来处理登录。
  • 原生应用不需要使用 FB SDK....事实上,FB 用天知道会膨胀他们的 SDK,所以如果你只需要登录,那么构建自己的服务。

标签: ios facebook facebook-graph-api


【解决方案1】:

是的,这是可能的。这是必要的 redirect_uri

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

确保您的 Facebook 应用程序已设置:

并确保您的自定义 URL 方案已设置:

上面令人失望的评论——可能误导了很多人。不过,这些东西根本没有很好的记录。

【讨论】:

  • 只有一个问题:当在developers.facebook.com 上的Facebook 登录部分提供有效OAuth 重定向URI 时,像这样的值似乎被拒绝为无效。我试过fb<bundle_id>://authorize。错误消息是“出了点问题。我们正在努力尽快修复它。”错误代码(来自 HTTP 流量)是 1357010,但该代码未在线记录。
  • 这个解决方案似乎不再起作用了。有什么见解吗,亚历克斯?
  • 顺便说一句,您必须(似乎)使用authorize 路径,您不能使用其他自定义路径并期望它能够正常工作。在那个细节上浪费了几个小时。
  • 这对我也不起作用。我真的认为 facebook 希望您为此专门使用他们的 SDK。
【解决方案2】:

我联系了 Facebook 支持,他们确认不支持:

感谢您与我们联系。我们将在此方面使消息传递更加清晰,但我们不支持将自定义 URI 方案作为有效的重定向 URI。要在不打开浏览器的情况下在本机应用程序中执行登录,请使用官方 SDK(您要查找的是 https://github.com/xamarin/FacebookComponents 吗?)。

他们在不到 12 小时内做出了回应,这至少令人印象深刻。

【讨论】:

    【解决方案3】:

    我设法让Alex Paterson 解决方案在这里工作。我也必须在 Facebook 登录设置中添加 redirect_uri URL。在 Valid OAuth redirect URIs 部分,我添加了回调 URL,如下所示:

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

    【讨论】:

    • 您是指整个“graph.facebook...”网址还是只是 redirect_uri (fb...)?
    • @Toshkuuu Facebook 开发者配置中的整个 URL。
    【解决方案4】:

    正如其他一些答案和 cmets 所表明的那样,我认为 Facebook 不支持您尝试做的事情 - 我的印象是他们真的希望您使用 FBSDK 来完成身份验证和接收令牌从脸书。

    感觉就像我用someapp://authorize 策略在阳光下尝试了所有可能的配置,但看起来他们真的只希望你为网络应用程序这样做。

    我正在使用 react native 构建(所以这可能不直接适用。我确信 obj-C 在实践中有些相似),所以我使用了 react-native-fbsdk 库,它公开了 LoginButton 和 @ 987654324@ 组件,您可以这样使用它们:

              <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")}
          />
    

    【讨论】:

      猜你喜欢
      • 2016-03-29
      • 2016-11-06
      • 2017-03-25
      • 2017-03-28
      • 2023-04-11
      • 1970-01-01
      • 2012-07-17
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多