如果安装,则重定向到应用程序,否则重定向到App Store

时间:2012-12-27 00:59:28

标签: ios redirect app-store

我知道可以通过注册自定义方案(例如so://)直接链接到iOS中的应用,也可以通过iTunes链接到appstore中的应用。

在许多情况下,理想的流程是提供一个链接,重定向到应用程序如果已安装,如果没有,则重定向到商店。这是可能的,如果是的话,怎么样?

为了清晰起见而添加,情节是我正在通过我的iphone上的电子邮件打开一个链接(http),邀请我加入应用程序中的一个组。如果用户在该设备上安装了应用程序,则应该打开,否则http链接应该重定向到iTunes。

8 个答案:

答案 0 :(得分:50)

我认为更简单的答案是使用以下javascript在您的服务器上设置页面:

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myapp://");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

这基本上会尝试重定向到您的应用并设置超时,以便在应用商店失败时重定向到应用商店。

您甚至可以使代码更加智能,并检查用户代理以查看它们是ios用户,Android用户还是webuser,然后适当地重定向它们。

答案 1 :(得分:26)

没有办法检查这个。 但是,有一个很好的解决方法。

这个想法基本上是这样的:

  1. 首次打开应用时,您可以在应用内打开移动版Safari,直至服务器上的预定义网址
  2. 在该网址上设置了一个Cookie,例如appInstalled to users mobile safari
  3. 然后,您使用已注册的方案(与FB对SSO相同)将用户踢回您的应用程序
  4. 您的所有电子邮件链接都指向您的网站,但在网站上您检查浏览器是否为移动版Safari以及是否存在appInstalled cookie
  5. 如果浏览器不是移动版Safari或找不到cookie,则会重定向到AppStore,或者保留在您的网页中。
  6. 如果#4的条件为真,则使用已注册的方案将用户重定向到您的应用
  7. 如果用户已删除该应用,则自定义网址方案失败,您将自动重定向到应用商店
  8. 解释了最后两个步骤on this SO post

答案 2 :(得分:13)

如果您有一个网页,您可以通过包含iframe的网页的电子邮件链接到您的应用的自定义方案,iOS将自动重定向到该位置应用程序。如果未安装该应用程序,则不会发生任何事情。这允许您深入链接到应用程序(如果已安装),或者如果未安装则重定向到App Store。

例如,如果您安装了Twitter应用,并导航到包含以下标记的网页,您将立即转到该应用。如果您没有安装Twitter应用程序,您会看到文本“未安装Twitter应用程序。”

src

以下是一个更全面的示例,如果未安装App,则会重定向到App Store:

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="twitter://" width="0" height="0"></iframe>
        <p>The Twitter App is not installed</p>
    </body>
</html>

答案 3 :(得分:7)

是的,非常容易。这需要您要打开的应用程序在plist中声明一个url方案:

//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}

答案 4 :(得分:7)

“智能应用程序横幅” - 不确定何时出现,但在找到这篇文章之后寻找相同内容,然后是Smart App Banners,这是后续行动。

智能应用横幅是您希望通过网络体验为您的应用提供的每个网页标题中的单行html元标记:

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

显示页面顶部的图标和“使用应用程序打开此页面”或路由到App Store。

enter image description here

iPhone上此页面的元数据如下所示(当然是匿名的):

<meta name="apple-itunes-app" content="app-id=605841731, app-argument=lync://confjoin?url=https://meet.rtc.yourcorporatedomain.com/firstName.lastName/conferenceID">

Apple Developer Documentation - Promoting Apps with Smart App Banners

答案 5 :(得分:1)

完成此操作的几个简单步骤

第1步

转到->项目(选择目标)->信息-> URL类型

enter image description here

在Xcode中创建URL方案 像这样

enter image description here  这里的URL Scheme是myApp(最好所有字符都小写)。

第2步

如果您打算从URL接收参数/查询字符串,请设置代表

这是代码:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

     NSLog(@"APP : simple action %@",url.scheme);

    if ([url.scheme hasPrefix:@"myapp"]) {

        NSLog(@"APP inside simple %@",url.absoluteString);


        NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                    resolvingAgainstBaseURL:NO];
        NSArray *queryItems = urlComponents.queryItems;
        NSString * abc = [self valueForKey:@"abc"
                           fromQueryItems:queryItems];
        NSString * xyz = [self valueForKey:@"xyz"
                           fromQueryItems:queryItems];


        NSLog(@"Sid up = %@", abc);

        NSLog(@"PID up = %@", xyz);

      // you can do anything you want to do here



        return YES;
    }
return NO;
}

Xcode辅助工作结束。

第3步

在这里引用@BananaNeil代码,因为我不是前端人员

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myApp://share?abc=12&xyz=123");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

希望它将帮助您

答案 6 :(得分:1)

这里有很多复杂的情况,所以最简单的解决方案是让别人来处理这些东西。

https://branch.io/就是这样做的。 您可以使用他们的免费计划,通过一些额外的功能来完全实现您想要的

  • 统计
  • 您可以将信息与链接一起传递,即使用户必须先进行安装,也会检索到该信息
  • 链接可在桌面上使用(默认情况下,它将通过短信将安装链接发送到您的手机)

我不隶属于Branch.io,但是我使用他们的产品。

答案 7 :(得分:1)

如果某人仍然陷在此问题中并且需要最简单的解决方案,那么您会爱上node-deeplink

1。)如果已安装应用程序:通过深度链接调用应用程序将始终调用根组件的componentDidMount。因此,您可以在此处附加一个侦听器。 喜欢:

Linking.getInitialURL()
      .then(url => {
        if (url) {
          this.handleOpenURL({ url });
        }
      })
      .catch(console.error);

    Linking.addEventListener('url', this.handleOpenURL);



handleOpenURL(event) {
    if (event) {
      console.log('event = ', event);
      const url = event.url;
      const route = url.replace(/.*?:\/\//g, '');
      console.log('route = ', route);
      if(route.match(/\/([^\/]+)\/?$/)) {
        const id = route.match(/\/([^\/]+)\/?$/)[1];
        const routeName = route.split('/')[0];

        if (routeName === 'privatealbum') {
          Actions.privateAlbum({ albumId: id });
        }
      }
    }
  }

2。)如果未安装应用程序:只需在服务器中设置路由,并且node-deeplink程序包将处理未在移动设备中安装应用程序时Web浏览器到应用程序商店之间的桥接。

这样,这两个案件都将得到轻松处理