ios - 适用于 iOS 6 的 Facebook SDK 3.2 : Can't login -> openURL not called/AppId & URL is correct

标签 ios authentication sdk facebook-ios-sdk openurl

嘿嘿

我对 iOS 6 的新 Facebook SDK 3.2 有一个大问题(我使用 iPhone 模拟器进行测试)。我已经完全按照操作方法中的描述实现了 Facebook 登录。唯一的区别是我没有在应用程序委托(delegate)中实现它。我在一个单独的 mm 文件中实现了 Facebook-Stuff(但我也在应用程序委托(delegate)中测试了代码 -> 同样的问题!)。

这就是发生的事情: 如果我尝试登录,屏幕中间会弹出一个 UIView(可能是 UIWebView),我可以输入我的帐户凭据。接下来是权限确认屏幕。我单击“确定”按钮,然后出现错误: “操作无法完成。(com.facebook.sdk 错误 2。)” UserInfo=0x14bbd590 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorLoginNotCancelled}

我已经体验过旧的 facebook-sdk v2。整合起来没有任何问题!但对于新版本和 iOS 6,我无法让它运行:-(

我认为一个重要的问题可能是 UIApplicationDelegate 的 openURL 方法没有被调用!我已将 AppID 插入 info.plist 并添加了 URL 类型。它看起来像这个片段:

<key>CFBundleURLTypes</key>
<array>
<dict>
  <key>CFBundleURLSchemes</key>
    <array>
      <string>fb111111111111111</string>
    </array>
</dict>
</array>
<key>FacebookAppID</key>
<string>111111111111111</string>

我还使用wireshark分析了该网址:

https://www.facebook.com/login.php?app_id=111111111111111&sdk=ios&skip_api_login=1&cancel=fb111111111111111%3A%2F%2Fauthorize%2F%3Ferror_reason%3Duser_denied%26error%3Daccess_denied%26error_description%3DThe%2Buser%2Bdenied%2Byour%2Brequest.&fbconnect=1&next=https%3A%2F%2Fm.facebook.com%2Fdialog%2Fpermissions.request%3F_path%3Dpermissions.request%26app_id%3D111111111111111%26client_id%3D111111111111111%26redirect_uri%3Dfb111111111111111%253A%252F%252Fauthorize%26sdk%3Dios%26display%3Dtouch%26type%3Duser_agent%26fbconnect%3D1%26sso%3Diphone-safari%26from_login%3D1&rcount=1&_rdr

解码后的网址相同: https://www.facebook.com/login.php?app_id=111111111111111&sdk=ios&skip_api_login=1&cancel=fb111111111111111://authorize/?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request.&fbconnect=1&next=https://m.facebook.com/dialog/permissions.request?_path=permissions.request&app_id=111111111111111&client_id=111111111111111&redirect_uri=fb111111111111111%3A%2F%2Fauthorize&sdk=ios&display=touch&type=user_agent&fbconnect=1&sso=iphone-safari&from_login=1&rcount=1&_rdr

我还仔细检查了所有相关位置的应用程序 ID 是否相同(info.plist/url/dev-site: bundle ID)!

不知道这是否是一个重要信息,但我们在应用程序中不使用任何 xib 文件,因为它是一个使用我们自己的 3d 引擎的 3D 游戏。并且提供的屏幕方向仅为横向。我使用 Xcode 版本 4.5.2 (4G2008a)。

有什么想法吗?

3 个附加问题(也许它可以帮助我获取更多信息):

  1. 我如何获得有关问题所在的更多信息? “com.facebook.sdk error 2”不是很有帮助:-/

  2. 是否有一种简单的方法可以测试 UIApplicationDelegate 中 openURL 方法的自动重定向调用?

  3. 有没有办法强制sdk使用safari浏览器而不是 View 登录?

提前致谢

马丁

最佳答案

我找到了解决办法: 您必须在“application: didFinishLaunchingWithOptions”方法中调用“canOpenURL”方法,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  ...
  [[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString:@"fb111111111111111"]];
  ...
  return YES; //or NO;  doesn't matter
}

现在的效果是 sdk 尝试使用 safari 浏览器登录,而不是使用愚蠢的 WebView :-)

_

提示:

您可以直接从info.plist文件中读取URL方案:

NSString urlScheme = [[[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"] objectAtIndex:0] objectForKey:@"CFBundleURLSchemes" objectAtIndex:0];

关于ios - 适用于 iOS 6 的 Facebook SDK 3.2 : Can't login -> openURL not called/AppId & URL is correct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024551/

相关文章:

tomcat - 本地网络上的 Chromecast

javascript - Yammer JSON SDK 在 Chrome 和 FF 中通过 ADFS 进行身份验证,但在 IE 中访问被拒绝

java - 我可以在不安装 facebook.apk 的情况下使用适用于 Android 的 facebook sdk 吗?

iphone - Core Motion 错误 102 是什么意思?

iOS Storyboard : set ImageView width and height not work

ios - Cordova IOS 应用程序在 IOS 14 中显示白屏

ios - 在 iOS Metal 中执行(支持的) float 纹理写入时出错

php - 使用混合身份验证恢复 session

authentication - 如何在 Azure AD 身份验证后重定向到 ASP Net Core MVC 中的不同 Controller 操作

python - from django.contrib.auth.models import User 与将用户foreignKey定义为owner = models.ForeignKey ('auth.User' )