IOS的URLredirect从邮件到应用程序

有可能以某种方式启动我的应用程序使用通过邮件发送的URL? 例如,我有用户个人资料,用户想邀请他们的朋友进入应用程序。 他们发送一个电子邮件,有像这样的url:

join我通过这个链接: http://appname?sender_id=25&some_other_value=something

并从iPhone打开该链接将把用户带入应用程序,并让我parsing这些值。

那可能吗?

是的,这是完全可能的。 您需要为您的应用注册一个URLscheme。

在Xcode中select您的应用程序项目,然后单击目标,然后从“信息”选项卡中注册一个新的URLscheme。

标识符是您的应用程序标识符com.company.AppName和URL计划是您想要使用的名称,如appName

至于理想的解决scheme,因为我们现在将这个添加到我们的应用程序,你最好不要发送电子邮件链接与您的自定义scheme。 原因是用户可能会从电脑打开它,所以这个链接将不起作用。

最好的情况如下:

  1. 当您的应用程序第一次运行时,从您的应用程序打开Safari浏览器并将其发送到您的网站。
  2. 在网站中,为Safari安装一个cookie(如myAppIsInstalled)
  3. 在同一个网站中,通过将您的自定义urlschemeredirect到您的应用,例如appname://将用户踢回到您的应用

现在你发送你的电子邮件与链接到您的网站的普通URL的链接,这里是第2部分:

  1. 在您的网站上,检查您的应用程序是否已安装(该Cookie存在)
  2. 如果它存在,而不是打开您的网站链接,redirect用户到您的应用程序,具有适当的值,如

    应用程序名称://邮箱sender_is = 123&USER_NAME = Lefteris?

这确保您的电子邮件链接将始终正常工作,并且只有当您的应用程序已经安装在设备上,您才能从Mobile Safari中打开链接。

最后,请注意,URLscheme是appname://而不是http://appname

现在来解释第1部分,在我们的AppDelegate中,我们可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions执行此操作- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions delegate:

 //if user has not set the app installed cookie, set it now. bool hasAppInstalledCookie = [[NSUserDefaults standardUserDefaults] boolForKey:@"appInstalledCookie"]; if (!hasAppInstalledCookie) { //mark it was set [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"appInstalledCookie"]; [[NSUserDefaults standardUserDefaults] synchronize]; //open the web browser [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.myApp.com/appInstalled"]]; } 

现在在我们的appInsert页面(例如index.html)中,我们只需设置一个cookie(我们想要的任何cookie名称),然后我们将用户踢回到我们的应用程序,如下所示:

 <script type="text/javascript"> window.location = 'appName://'; </script> 

我们使用cookie的原因是使用这个cookie,当用户打开一个电子邮件链接。 我们将检查浏览器是否为移动Safari,并且安装了Cookie。 这样,我们知道用户已经安装了我们的应用程序,redirect将正常工作。

上面标记的答案是正确的,工作正常。 但是,在iOS 9中,Apple推出了Universal Links ,它允许您将特定的Web域或Web链接(path)关联到您的应用程序。 如果应用程序已安装,则可以更轻松地redirect到您的应用程序,如果应用程序不是,则可以将其redirect到您的网页。

请注意,对于仍在运行较旧版本的iOS(iOS 9之前)的设备,您可能仍然需要支持Scheme URI(可能会回退到url链接,如果未安装此应用)。

如果有人感兴趣,我已经logging了我在Universal Links的经验。