iOS 10.3通用链接无法工作

10

我已经查看了 Stack Overflow 上几乎所有与通用链接相关的问题,但仍然没有任何进展。值得一提的是,这似乎都通过了 Branch 验证器

我正在运行 iOS 10.3,并在 https 下提供我的 aasa 文件,所以理论上我不需要对其进行签名。

这就是我的情况:

当应用程序安装时,跟踪我的临时服务器的 Heroku 日志会给我这个:

7-07-27T17:24:59.818724+00:00 heroku[router]: at=info method=GET path="/.well-known/apple-app-site-association" host=trueey-staging.herokuapp.com request_id=54b817e2-1d89-4c7a-9ed8-f52bdb3ad46e fwd="24.23.197.78" dyno=web.1 connect=1ms service=6ms status=200 bytes=618 protocol=https
2017-07-27T17:24:59.812926+00:00 app[web.1]: Started GET "/.well-known/apple-app-site-association" for 24.23.197.78 at 2017-07-27 17:24:59 +0000
2017-07-27T17:24:59.814845+00:00 app[web.1]: Processing by Web::AppSiteController#show as */*
2017-07-27T17:24:59.815538+00:00 app[web.1]: Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms)

1) 我的权益:

applinks:trueey-staging.herokuapp.com
applinks:https://trueey-staging.herokuapp.com

这些是同样的东西吗?很可能是,但让我们再确认一下

2)我的苹果应用关联文件、路由和提供它的Rails控制器:

apple-app-site-association(位于/public目录下,命名为apple-app-site):

{
    "applinks": {
        "apps": [ ],
        "details": [
            {
                "appID": "[Prefix].[AppId]",    
                "paths": [ "*", "/" ]
            }
        ]
    }   
}

路线:

  get "/apple-app-site-association", to: "web/app_site#show"
  get "/.well-known/apple-app-site-association", to: "web/app_site#show"

控制器:

module Web

class AppSiteController < ApplicationController
    def show
        data = File.read("#{Rails.root}/public/apple-app-site")
        render json: data
    end
end

end

3) 在我的AppDelegate中,我已经实现了application:continueUserActivity:restorationHandler:函数,并将其设置为与didFinishLaunchingWithOptions被调用时做完全相同的事情(还会额外打印出一堆====

然而...

没有任何反应。在部署到staging之后,我在手机上加载应用程序,通过我们的共享功能生成链接并将其保存到notes中,然后单击该链接,只想将其在Safari中打开。长按没有任何反应,也没有其他迹象表明Safari正在打开而不是应用程序。设备日志似乎没有显示任何问题,但也许我没有搜索正确的内容?

帮帮忙。


你尝试过卸载并重新安装你的应用程序吗?只有在应用程序刚安装时,通用链接才会被注册。 - donnywals
@donnywals 是的,每次我从XCode重新构建时,我都会在手机上卸载应用程序...我需要做更多的事情吗? - Nick Coelius
3个回答

1
似乎你的问题出现在应用程序实现上,而非服务器。
你需要在应用程序委托中实现application:continueUserActivity:restorationHandler:函数。
你可以在这里阅读更多,我猜你已经访问过了,但请特别注意“准备应用程序处理通用链接”部分:
引用:

在指定关联域之后,采用Handoff的UIApplication委托方法(特别是application:continueUserActivity:restorationHandler:),以便您的应用程序可以接收链接并适当处理它。

当iOS在用户点击通用链接后启动您的应用程序时,您将收到一个NSUserActivity对象,其activityType值为NSUserActivityTypeBrowsingWeb。活动对象的webpageURL属性包含用户正在访问的URL。网页URL属性始终包含HTTP或HTTPS URL,并且您可以使用NSURLComponents API来操作URL的组件。


请注意我的问题中的第三点——应用委托被设置为处理传入请求并执行与正常的didFinishLaunching流程完全相同的操作,即只打开应用程序到第一页。我计划最终做更多的专业化内容,但现在我只想让它启动……但它没有!我已经在continueUserActivity周围放置了print语句和断点,但它们没有被激活。 - Nick Coelius
我注意到第三点,这就引导我找到了这个解决方案。它表明您尚未实现所需的函数。除非您实现它,否则应用程序将无法启动,请尝试添加一个打印行以进行测试,并带着结果回来,祝你好运! - inspector_60
这就是我所说的 - continue userActivity 已经实现了,并且正在执行与 didFinishLaunching 相同的操作,因此应该只是打开应用程序到第一页 - 但什么也没有发生。 - Nick Coelius

0

我认为以下内容可以帮助您。

1)在关联域中添加applinks:trueey-staging.herokuapp.com

2)尝试将您的json更改为https://trueey-staging.herokuapp.com/apple-app-site-association

{"applinks":{"apps":[],"details":[{"appID":"SSHENFP95X.com.markmywordsllc.trueey-staging","paths":["*"]}]}}

3) Apple需要一些时间来注册新的通用链接。

完成这些步骤后,尝试从另一个应用程序打开https://trueey-staging.herokuapp.com,它应该会打开您的应用程序。


哈哈,我的 aasa 实际上是 "SSHENFP95X.com.markmywordsllc.trueey-staging",我在这里出于隐私目的进行了编辑。但当然任何人都可以访问该网址并查看 ID,呵呵。 - Nick Coelius

0
最终让它起作用的是添加一个application-identifier授权,其值类似于AASA文件中的appID;我使用了通配符$()作为后缀,理论上它将适用于所有部署环境。不知道这应该从哪里获取,或者苹果文档做出了什么假设,但是...现在应用程序可以从链接中打开了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接