【问题标题】:'FBSession: No AppID provided'FBSession: 未提供 AppID
【发布时间】:2018-09-10 15:18:34
【问题描述】:

我刚刚使用适用于 iOS 的新 Facebook 3.0 SDK 更新了我的应用程序。在此之前,我使用的是使用 FBSessionDelegate 和 FBRequestDelegate 的 SDK。在那个 SDK 中,我们必须将此代码放在 applicationDidFinishLaunching 中:

 facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
} 

但是现在有了新的 3.0 SDK,我被告知我们所要做的就是导入框架和资源包,然后“将名为 FacebookAppID 的 ID 添加到包 *.plist” 所以我已经完成了,但是当我调用其中包含 FBSession 的任何代码时,我会收到此错误:

 'FBSession: No AppID provided; either pass an AppID to init, or add a string valued key with the appropriate id named FacebookAppID to the bundle *.plist'

我做错了什么?

【问题讨论】:

    标签: facebook-ios-sdk


    【解决方案1】:

    在 plist 文件中有“FacebookAppID”条目就足够了。

    但是,在将“FacebookAppID”字符串从文档网站复制到 Xcode 中的 plist 文件后,我遇到了同样的问题。 从 plist 文件中删除“FacebookAppID”条目并通过实际输入重新输入后,它起作用了!

    因此,当将字符串“FacebookAppID”从 HTML 文件复制/粘贴到 plist 文件时,一些不可见的标记也被复制或字符编码搞砸了。

    【讨论】:

    • 嗯……疯了。这花了我很长时间才弄清楚,但这个答案实际上解决了这个问题。谢谢!
    • 绝对疯狂,这行得通。我想这与 plist 文件的缓存和更新方式有关。
    【解决方案2】:

    只是为了提醒。我今天遇到了这个问题,最终我只是注意到我只是将条目放在了错误的 .plist 文件中。 如果您过滤您的项目文件(左下角),输入 .plist,您可能会看到两个文件。一个是测试,另一个是您实际需要设置的。 祝你好运!

    【讨论】:

      【解决方案3】:

      我仍然不确定为什么会这样,但我的解决方法是检查 FBSession 对象是否有 APP_ID,如果没有,则手动设置:

      if (![FBSession defaultAppID]) {
          [FBSession setDefaultAppID:FB_APP_ID];
      }
      

      希望这对某人有所帮助!

      【讨论】:

      • 它在新的 facebook SDK 中已被弃用。你对新方法有什么想法吗?
      【解决方案4】:

      在我的例子中,我愚蠢地输入了带有小写“d”的 FacebookAppId。只是把它放出来以防万一有人遇到同样的问题。

      【讨论】:

        【解决方案5】:

        @Kwame 我遇到了同样的问题,您的会话对象缺少 App id。为此,您可以在名为 FacebookAppID 的 info.plist 中添加一个键,并使用 facebook 提供给您的 ios 应用程序的应用程序 ID 设置适当的值。或者如果您已经这样做了,您可以通过在 - (id)initWithAppID:(NSString*)appID permissions:(NSArray*)permissions urlSchemeSuffix:(NSString*)urlSchemeSuffix tokenCacheStrategy:(FBSessionTokenCachingStrategy*)tokenCachingStrategy; 方法中设置适当的值以编程方式设置应用程序 ID。还请交叉检查 info.plist 中应用程序 ID 的值。希望这可以帮助。

        【讨论】:

        • 谢谢。只是 Facebook iOS SDK 文档让您看起来好像您所要做的就是设置 FacebookAppID info.plist。他们不会费心去讲述所有这些不同的做法。
        【解决方案6】:

        您在这里可能犯的另一个错误是使用快速搜索来搜索“plist”,而没有注意到您将 App ID 添加到错误的 plist 文件中。如果您包含了像 Google Maps SDK 这样的框架,它就有自己的 plist 文件。

        【讨论】:

          【解决方案7】:

          AppDelegate.swift

          import FBSDKCoreKit
          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
          
              FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
              FBSDKSettings.setAppID("FacebookAppID")
          
              return true
          }
          
          func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
          if FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) {
              return true
          }
          
          return true
          }
          

          【讨论】:

            【解决方案8】:

            除了以前的答案之外:即使您注意到您将 FacebookAppID 添加到 错误 *.plist 文件中并且仍然遇到相同的错误,请再次检查。可能,您将其替换为 another 错误 *.plist

            【讨论】:

            • 这属于对上一个答案的评论
            • @Félix 是的,但我的意思是它可能会犯两次错误,特别是如果您的附加库很少有自己的 plist。所以只需要非常细心,这是很常见且很愚蠢的错误。
            • 是的。所以把它放在评论中:) cmets 正是为了这些精度和“你需要专心”的提示而存在的。如果其他人认为您的评论有用,他们可以投票给您的评论,甚至还有非常优秀的 cmets 的徽章 :)
            • @Félix 好的,谢谢 :) 但我还没有评论的权利
            猜你喜欢
            • 2015-03-06
            • 2016-08-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-25
            • 2022-11-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多