我们的组织使用企业帐户和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权限问题有关,但由于我能够直接下载该文件,我并不确定。
答案 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 包中,但我是这样解决的:
运行firebase init functions
在 functions/index.js 中编写重定向
exports.downloadApp = functions.https.onRequest((req, res) => {
res.redirect(302, 'itms-services://?action=download-manifest&url=<YOURMANIFEST>');
});
运行firebase deploy --only functions
在您的 firebase.json 中添加一个 rewrite(不是重定向)到函数:
"rewrites": [
{
"source": "/app",
"function": "downloadApp"
}
]
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