为Universal Links配置Xamarin.Forms iOS应用程序?

时间:2018-03-21 17:36:53

标签: xamarin.forms xamarin.ios ios-universal-links

我按照这些说明操作。该应用程序是一个Xamarin.Forms iOS应用程序。

https://xamarinhelp.com/ios-universal-links/

这是我不确定的事情。

首先,我将一个众所周知的文件夹添加到我的MVC 5 Web App中。我无法添加.well-known文件夹。因为我无法添加"。"在文件夹前面,我使用Azure门户添加了一个虚拟目录。

enter image description here

当我尝试使用https://portal.mydomain.com/.well-known/apple-app-site-association访问该文件时,收到以下消息。

"您要查找的资源已被删除,名称已更改或暂时无法使用。"

其次,我必须使用XML文本编辑器编辑Entitlements.plist。这是我的条目。

<plist version="1.0">
 <dict>
  <key>com.apple.developer.associated-domains</key>
  <array>
    <string>applinks: portal.mydomain.com</string>
    <!--<string>your domain</string>-->
  </array>
 </dict>
</plist>

接下来,这是ContinueUserActivity和OpenUrl的样子。

//运行AppLinks应用

public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
    {
        try
        {

            if (userActivity.ActivityType == "NSUserActivityTypeBrowsingWeb")
            {
                if (userActivity.WebPageUrl.AbsoluteString.Contains("/PublicOffers/OffersPage"))
                {

                    ((App)Xamarin.Forms.Application.Current).AppLinkRequest(new
                    Uri(userActivity.WebPageUrl.AbsoluteString));
                    return true;
                }

            }

        }
        catch
        {
            // Ignore issue for now
        }

        return base.ContinueUserActivity(application, userActivity, completionHandler);
    }

// AppLinks应用未运行

public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {

        try
        {
            var components = new NSUrlComponents(url, true);
            var path = components.Path;
            var query = components.Query;

            // Is this a known format?
            if (path == "/PublicOffers/OffersPage")
            {
                // Send to App.xaml.cs
                ((App)Xamarin.Forms.Application.Current).AppLinkRequest(new
                Uri(url.AbsoluteString));
                return true;
            }
        }
        catch
        {
            // Ignore issue for now
        }

        //return false;

        return base.OpenUrl(app, url, options);
    }

最后,我创建了一个调用OnAppLinkRequestReceived。

的方法
public async void AppLinkRequest(Uri uri)
    {
        OnAppLinkRequestReceived(uri);
    }

问题是ContinueUserActivity和OpenUrl永远不会被调用。

以下是我想使用Universal Links打开/提示应用的网址示例。

https://portal.mydomain.com/PublicOffers/OffersPage?id=SOMEGUID&cid=SOMEGUID

非常感谢任何想法,帮助或建议。谢谢!

更新1

我在我的知名文件夹中添加了一个新的web.config文件并对其进行了配置。我现在可以访问这两个文件。不过,我的iOS通用链接仍无效。

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 <system.webServer>
  <staticContent>
   <mimeMap fileExtension="." mimeType="application/octet-stream" />
   <mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
 </system.webServer>
 </configuration>

更新2

我终于意识到为什么我的Entitlements.plist文件没有包含Associated Domains的选项。要查看该选项,您必须右键单击该文件,选择&#34;打开方式...&#34;并选择&#34;属性列表编辑器&#34;。

https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/provisioning/entitlements?tabs=vswin

更新3

我刚刚运行了这个验证工具,一切都是绿色的。它会查找apple-app-site-association文件。

http://branch.io/resources/aasa-validator/

您的域名有效(有效的DNS)。 您的文件通过HTTPS提供。 您的服务器不会返回大于400的错误状态代码。 您文件的内容类型&#39;标题被发现:) 您的JSON已经过验证。

更新4

我刚做了一个干净,重建和构建。 Universal Links仍然无效。

更新5

我升级到Visual Studio 2017 Enterprise和Xamarin.iOS 11.9.1.24。我现在正在使用11.3 SDK,但我仍然无法使用Universal Links。我也升级到了Xamarin.Forms 2.5.1.444934。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,apple-app-site-association文件经过了很好的验证,并且我在AppDelegate.cs中实现了ContinueUserActivity和OpenUrl方法,但是当使用Windows XP从Windows计算机构建和部署时,通用链接无法正常工作外部Mac构建主机。

所以我认为我应该尝试相同的过程,但是这次使用Visual Studio for Mac在Mac构建主机上本地运行所有内容。 克隆项目,从我的手机中删除该应用程序,重新构建该项目,进行部署和验证,它就像一个魅力。

答案 1 :(得分:1)

我终于通过删除此行中的空格来使其工作。

<string>applinks: portal.mydomain.com</string>

现在看起来像这样。

<string>applinks:portal.mydomain.com</string>.

我想通了,因为在将应用提交到应用商店时遇到错误。错误是:

  

您的应用程序捆绑包的签名包含iOS上不支持的代码签名权利。具体来说,为有效载荷中的关键com.apple.developer.associated-domains设置值applinks:portal.mydomain.com ...