使用Firebase通过无线方式分发iOS应用程序

时间:2017-07-20 08:15:55

标签: ios firebase firebase-storage ota

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

ITMS服务://动作=下载舱单&安培; 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权限问题有关,但由于我能够直接下载该文件,我并不确定。

2 个答案:

答案 0 :(得分:1)

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

我使用 https://www.redirect-checker.org/index.php 来检查我的重定向实际重定向到的内容,结果显示它遗漏了 //

<块引用>

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

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

我只能推测,但我认为 Firebase 删除 // 的问题在于他们如何处理 :,因为他们将它与“glob”模式匹配一​​起使用:{{3} }.

尝试

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

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

    <块引用>

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

解决方案

我认为使用 firebase 执行此操作的唯一方法是使用类似于此问题的函数进行重定向:https://firebase.google.com/docs/hosting/full-config

这肯定是更多的工作,不包含在免费的 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 没有 : 的转义字符

答案 1 :(得分:0)

您的网址应该被编码。

例如:

普通网址: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