【问题标题】:How to add Firebase to Today Extension iOS如何将 Firebase 添加到 Today Extension iOS
【发布时间】:2017-04-28 03:39:00
【问题描述】:

我需要能够在我的 Today View Extension 中使用 Firebase,但是我似乎无法导入 Firebase 模块。我认为这是因为我的可可豆荚文件中需要一个新目标,但我不确定如何执行此操作。

谢谢。

【问题讨论】:

    标签: ios swift firebase cocoapods today-extension


    【解决方案1】:

    您必须将今天的扩展程序视为它自己的独立应用程序(有点)

    在您的 firebase 项目仪表板中,您需要点击“添加另一个应用程序”按钮。

    选择 iOS,然后输入 TODAY EXTENSIONBUNDLE ID

    完成向导并下载生成的 GoogleService-Info.plist 文件

    将 plist 文件添加到 Today Extension 的根文件夹

    转到您的 xcode 项目,并手动将 FirebaseCore.framework 和 FirebaseDatabase.framework 添加到您的 Today Extension

    终于在今天的视图控制器调用 FirebaseApp.configure()

    import FirebaseDatabase 
    import FirebaseCore
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        FirebaseApp.configure() 
    }
    

    【讨论】:

    • 看到它是两个不同的“应用程序”,这是否意味着我不能使用我所有数据所在的数据?例如,我的扩展“应用程序”可以访问我当前数据库中的数据吗?
    • 好吧,只是澄清一些事情... 1) 在您的 Firebase 控制台 (console.firebase.google.com) 2) 选择您现有的 Firebase 项目。 3)然后您将“应用程序”添加到您现有的 Firebase 项目中。 4)您的 Firebase 数据库(用于您现有的 Firebase 项目)将可供该现有 Firebase 项目中的所有“应用程序”访问。 5)如果此解决方案对您有用,请选择我的答案:-)
    • 感谢您的回答,但我们可以不手动添加 Firebase,而是通过 pod 到应用程序和今天的扩展程序?我试过这样做,但我的应用程序很糟糕!请在此处查看我的问题:stackoverflow.com/q/46826315/4498576 我将非常感谢您的帮助 :(
    • 似乎需要检查 [FIRApp defaultApp] 是否已经为空,以免出现应用程序已配置的崩溃
    • 但是如果用户需要登录呢?
    【解决方案2】:

    或者,无需在 Firebase 控制台中添加额外的应用,只需稍作修改即可重新使用主项目的 GoogleService-Info.plist(见下文)。 Firebase 应用单例必须在启动时在两个应用中进行配置。

    要同步扩展程序和包含的应用程序,请参阅 App Extension Programming Guide: Handling Common Scenariosthis reddit commentThis Stackoverflow thread 专门描述了这种场景。

    步骤

    1. 将包含应用的 GoogleService-Info.plist 复制到 Xcode 中的扩展中
    2. 将复制的GoogleService-Info.plist拖入Xcode到你的共享扩展中,然后
    3. 将 BUNDLE_ID 更改为您的共享扩展目标的名称
    4. 将新目标添加到您的Podfile
    5. 安装依赖项 (pod install)
    6. 在您的扩展程序中配置 Firebase 应用程序对象

    步骤 1. 将包含应用的 GoogleService-Info.plist 复制到 Xcode 中的扩展中

    步骤 2. 将复制的 GoogleService-Info.plist 拖入 Xcode 到您的共享扩展中,然后

    第 3 步。将 BUNDLE_ID 更改为您的共享扩展目标的名称

    对我们来说,主要(即包含应用程序)是Access News,共享扩展名是Access-News-Uploader

    步骤 4. 将新目标添加到您的 Podfile

    # ...
    
    target 'name-of-your-extension' do
    
      use_frameworks!
    
      pod 'Firebase/Core'
      pod 'Firebase/Auth'
      # etc.
    end
    

    Entire Podfile of our project.

    步骤 5. 安装依赖项 (pod install)

    第 6 步:在您的扩展程序中配置 Firebase 应用程序对象

    /* 1. Import Firebase */
    /**********************/
    import Firebase
    /**********************/
    
    class WhereverInYourExtension: WhateverController {
    
        // ...
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            /* 2. Configure Firebase */
            /*************************/
            if FirebaseApp.app() == nil {
                FirebaseApp.configure()
            }
            /*************************/
    
            // ...
        }
    

    Pod 问题修复

    1) 仍然无法导入 Firebase!

    确保为项目中的所有目标都安装了 pod。要实现这一点,请在 Podfile 中使用 inherit!abstract_target

    使用来自the official documentationabstract_target 的最简单示例:

    abstract_target 'Networking' do
      pod 'AlamoFire'
    
      target 'Networking App 1'
      target 'Networking App 2'
    end
    

    对于inherit!,请参阅this SO question and answer

    2)如何在我现有的应用程序上实现这一点而不搞砸?

    1. 删除PodfilePodfile.lockYourProject.xcworkspace

    2. 发出pod init,它会一一列出你现有的目标。

    3. 通过在abstract_target 下分组或使用inherit! 来编辑Podfile

    4. 问题pod install

    将生成一个新的YourProject.xcworkspace 文件,如果您使用此文件打开项目,在General > Linked Frameworks and Libraries 下会显示已添加 Firebase,可以从项目文件中导入。

    (有关需要使用此清理方法的具体示例,请参阅this SO thread。)

    3) firebase 'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead.

    这对我有用:

    1. 通过从 Github 克隆我们的项目 repo 来清除所有内容,

    2. 已删除

      • ~/Library/Developer/Xcode/DerivedData
      • ./Pods/
      • 播客文件
      • Podfile.lock
    3. 在控制台发出pod init

    4. 重新创建Podfile(基本上是复制粘贴)

    5. 在控制台发出pod update

    (下次可能就不行了。)

    【讨论】:

    • 我已经完成了安装 firebase 但问题是 Firebase 数据库没有更新我已经完成安装了 firebase 但问题是 Firebase 数据库没有在 UNNotificationServiceExtension 中更新我该怎么办?我该怎么办?
    • 项目的 Bundle ID 与“GoogleService-Info.plist”中的 Bundle ID 不一致,如果您使用自定义选项,则与选项中的 Bundle ID 不一致。为确保可以正确配置所有内容,您可能需要使 Bundle ID 保持一致。要继续使用此 plist 文件,您可以将应用的包标识符更改为包 ID。或者,您可以从 console.firebase.google.com 下载与您的包标识符匹配的新配置文件并替换当前的。
    • 谢谢!我最近没有做iOS开发,甚至没有硬件来测试它,所以如果有任何不准确的地方,请随时更新答案。
    • 另一个问题我未能获得 firebase auth 的许可这是一个问题
    【解决方案3】:

    据我所知,小部件不允许使用某些 api,例如 firebase。小部件应该显示主应用程序通过 UserDefaults 提供的数据,例如

    TodayViewExtensions(或小部件)在代码方面可能只是非常简单。

    【讨论】:

    • 我不这么认为,我想做的只是展示某人在该主题上发布的最新帖子。我见过很多其他应用程序这样做,例如 Flipboard
    猜你喜欢
    • 2017-06-07
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多