【问题标题】:Distributing iOS app over-the-air using Firebase使用 Firebase 无线分发 iOS 应用
【发布时间】:2017-12-25 19:42:56
【问题描述】:

我们的组织使用企业帐户和 itms-services 协议在内部通过无线方式部署应用。 我们的 plist 和 ipa 托管在 Amazon S3 上,一切都按预期工作 - 您单击一个链接,会弹出一个警报,询问您是否要安装该应用程序。 我们现在正尝试将我们的文件存储在 Firebase 存储中,并以以下格式发送链接:

itms-services://?action=download-manifest&url=https://firebasestorage.googleapis.com/v0/b/my-app.appspot.com/o/MyApp.plist?alt=media&token=my-token

在 Safari 中粘贴此链接会打开一个对话框,询问:“在“iTunes”中打开此页面?”单击打开没有任何作用。 值得一提的是,如果我将相同的 plist/ipa 组合上传到 S3,它可以正常工作。此外,如果我粘贴 url 本身(没有 itms-services 部分),我可以同时下载 plist 和 ipa。

为什么我没有收到询问我是否要安装应用程序的对话框?我觉得这与 Firebase 的权限问题有某种关系,但由于我能够直接下载文件,所以我不太确定。

【问题讨论】:

  • 我遇到了同样的问题。你解决过这个问题吗?
  • @zavtra 很抱歉我没有这样做。最后我们被指示使用 S3,所以我一直没有时间弄清楚这个...如果您确实找到了解决方案,请在此处发布,因为它可能对其他人有帮助。

标签: ios firebase firebase-storage ota


【解决方案1】:

你的网址应该被编码。

例如:

普通网址:https://firebasestorage.googleapis.com/v0/b/my-app.appspot.com/o/MyApp.plist?alt=media&token=my-token

编码网址:https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fmy-app.appspot.com%2Fo%2FMyApp.plist%3Falt%3Dmedia%26token%3Dmy-token

最后:itms-services://?action=download-manifest&url=https%3A%2F%2Ffirebasestorage.googleapis.com%2Fv0%2Fb%2Fmy-app.appspot.com%2Fo%2FMyApp.plist%3Falt%3Dmedia%26token%3Dmy-token

【讨论】:

    【解决方案2】:

    gfvilela 的解决方案在 2017 年有效,如果你有空间,你仍然需要这样做,但有一个新问题,即 firebase 在重定向中删除 itms-services: 之后的 //

    我使用https://www.redirect-checker.org/index.php 来检查我的重定向实际重定向到什么,它表明它忽略了//

    itms-services:?action=download-manifest&url=...

    不知何故,这仍然会打开弹出窗口“在 Itunes 中打开此页面”,但不会打开下一个弹出窗口“ 想要安装 ”,可能是因为打开的 Itunes 进程解析的 URL 与iOS 处理深层链接。

    我只能推测,但我认为 firebase 删除 // 的问题在于他们如何处理 :,因为他们将它与“glob”模式匹配一​​起使用:https://firebase.google.com/docs/hosting/full-config

    尝试

    • 我尝试对整个 URL 进行编码,仅对 // 部分,甚至仅对 : 进行编码,但所有这些都重定向到 mydomain.com/itms-services...

    • 我尝试使用动态链接模块,但这也不支持:

      请输入以 http:// 或 https:// 开头的有效网址

    解决方案

    我认为使用 firebase 执行此操作的唯一方法是使用类似于此问题的函数进行重定向:Cloud function for firebase to redirect to a URL

    这肯定是更多的工作,不包含在免费的 firebase 包中,但这是我解决它的方法:

    1. 运行firebase init functions

    2. 在functions/index.js中写重定向

    exports.downloadApp = functions.https.onRequest((req, res) => {
      res.redirect(302, 'itms-services://?action=download-manifest&url=<YOURMANIFEST>');
    });
    
    1. 运行firebase deploy --only functions

    2. 在你的 firebase.json 中添加一个 rewrite(不是重定向)到函数中:

    "rewrites": [
      {
        "source": "/app",
        "function": "downloadApp"
      }
    ]
    
    1. 运行firebase deploy --only hosting

    注意

    这是一个非常多的解决方法只是因为当你不想将它用于“glob”模式匹配时,firebase 没有: 的转义字符。 p>

    【讨论】:

    • 根据golang.org/pkg/net/url/#URL,URL 的格式应该是[scheme:][//[userinfo@]host][/]path[?query][#fragment]。不幸的是,由于 itms-services 不包含用户、主机或路径,这意味着它不会从 uri 的该部分获取//。我们正在努力解决这个问题。
    • @Kiana 该定义页面说您可以执行“主机或主机:端口”,但端口也无法在 Firebase 上运行,并且需要与我在此答案中描述的完全相同的解决方法。
    • 您介意提交允许重定向端口的功能请求吗?我看不出我们有什么理由不支持这些。 (导致问题的不是 glob)firebase.google.com/support/troubleshooter/report/features
    • @Kiana 我已经在去年 9 月为此制作了一张支持票(案例 00084631)。其中支持回复我说,问题是球体。 x) 他们说有计划在未来支持这个,但没有给出时间表。
    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2011-03-07
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多