Xamarin使用Rivets组件打开另一个应用程序

时间:2016-11-25 20:10:36

标签: xamarin xamarin.ios xamarin.forms

我必须从Xamarin表单的另一个应用程序中打开一个应用程序。我发现铆钉组件说它可以做我想要的但我不确定它指的是什么。

我看了http://applinks.org/documentation/,它说我想要每个移动平台打开的网址。 我的问题是,对于iOS,它在寻找什么网址?我认为这是itunes中应用程序的链接。所有这些链接都会在应用商店中打开应用商店,但如果已经安装了应用,则无法启动应用。

1 个答案:

答案 0 :(得分:1)

除非您可以控制 Blue Diamond Party 应用的代码,或者您知道 Blue Diamond Party 应用已注册了一个或多个自定义应用链接(这是自定义的)您已阅读过的网址,您将无法在iOS上的应用中打开它。这是使用铆钉进行操作的唯一方法。 Blue Diamond Party 应用需要注册一个它会响应的自定义URI。然后,使用铆钉,您的应用程序将调用该自定义URI。

*编辑:要让您的应用处理来自其他应用的应用链接,您可以前往Xamarin的Getting Started Guide(查看处理传入应用链接导航标题下):

Android的功能与iOS不同,但适用于iOS:

Info.plist 中注册自定义URI(不确定这是否是正确的XML,但是请查看图片的链接)(stringCFBundleURLName下只是您的方案的自定义名称,然后您可以在名称下列出数组中的多个方案:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>com.bluediamondparty.schemes</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>bluediamondparty</string>
    </array>
  </dict>
</array>

上述XML会将bluediamondparty注册为您的应用响应的URI方案。

现在,为了让您的应用在运行自定义方案的URI时执行某些操作,您可以覆盖OpenUrl中的AppDelegate(这允许您将自定义URI方案之后的内容放到例如,在您的应用中打开特定页面或项目):

public override bool OpenUrl (UIApplication app, NSUrl url, string srcApp, NSObject annotation) {
    var rurl = new Rivets.AppLinkUrl (url.ToString ());

    if (rurl.InputUrl.Host.Equals ("play")) {
        var gameModeType = rurl.InputQueryParameters ["game_mode_type"];

        var c = new ProductViewController (gameModeType, rurl.Referrer);
        navController.PushViewController (c, true);
        return true;
    }

    return false;
}

要从第二个应用程序打开URI,您可能会运行以下内容:

UIApplication.SharedApplication.OpenUrl(new NSUrl("bluediamondparty://play?game_mode_type=survival"));

最后,您可能会注意到,实际上并不需要使用 Rivets 组件...那么该组件实际上为我们做了什么?! 铆钉实际上做的是允许您的应用传递真实的网址(例如http://rdio.com/song/12345),铆钉将转到该页面并查找描述的特殊meta代码页面上的内容如何链接到用户可能已在其设备上安装的移动应用程序。因此,在rdio网页上,他们可能会有以下元标记:

<meta property="al:ios:url" content="rdio://song/12345" />

meta标记中,它将列出正确的自定义URI方案,以便在用户安装了Rdio应用并尝试使用自定义rdio URI方案注册自己时尝试打开该应用。

另一件要知道的是,您的应用程序没有URI方案的专有权利。因此,如果另一个应用程序选择与您相同的URI方案并且用户同时安装它们,那么要安装的最后一个应用程序将响应URI方案。