0

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

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

我已经体验过旧的 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分析了url:

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%2你的% 2brequest。 3Dios%26display%3Dtouch%26type%3Duser_agent%26fbconnect%3D1%26sso%3Diphone-safari%26from_login%3D1&rcount=1&_rdr

如果解码相同的 url: 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_1&insotype=iphone-agentfarib&display_1&insotype=user-afarib 1&rcount=1&_rdr

我还仔细检查了所有相关位置的 app-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-browser 而不是视图登录?

提前谢谢

马丁

4

1 回答 1

1

我找到了一个解决方案:您必须在方法“应用程序: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 Scheme:

NSString urlScheme = [[[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"] objectAtIndex:0] objectForKey:@"CFBundleURLSchemes" objectAtIndex:0];
于 2013-02-27T13:31:38.133 回答