Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ios url从邮件重定向到应用程序_Iphone_Ios_Objective C - Fatal编程技术网

Iphone ios url从邮件重定向到应用程序

Iphone ios url从邮件重定向到应用程序,iphone,ios,objective-c,Iphone,Ios,Objective C,是否可以使用通过邮件发送的URL以某种方式启动我的应用程序?例如,我有一个用户配置文件,用户希望邀请他们的朋友加入应用程序。他们发送的电子邮件包含一些url,如: 通过此链接加入我: http://appname?sender_id=25&some_other_value=something 从iPhone打开该链接会将用户带入应用程序,并让我解析这些值 这可能吗?是的,这完全可能。 你需要为你的应用注册一个URL方案 在Xcode中选择您的应用程序项目,然后单击目标,并从“信息”选项卡中注册一

是否可以使用通过邮件发送的URL以某种方式启动我的应用程序?例如,我有一个用户配置文件,用户希望邀请他们的朋友加入应用程序。他们发送的电子邮件包含一些url,如:

通过此链接加入我:
http://appname?sender_id=25&some_other_value=something

从iPhone打开该链接会将用户带入应用程序,并让我解析这些值


这可能吗?

是的,这完全可能。 你需要为你的应用注册一个URL方案

在Xcode中选择您的应用程序项目,然后单击目标,并从“信息”选项卡中注册一个新的URL方案

标识符是您的应用程序标识符com.company.AppName,URL方案是您希望使用的名称,如AppName

现在,对于理想的解决方案,由于我们正在将其添加到我们的应用程序中,理想情况下,您不应该使用自定义方案在电子邮件中发送链接。 原因是用户可能从计算机上打开它,因此此链接将无法工作

最佳方案如下:

  • 当你的应用程序第一次运行时,用你的应用程序打开Safari浏览器并将其发送到你的网站
  • 在网站中,为Safari安装cookie(如myAppIsInstalled)
  • 在同一个网站上,通过使用自定义URL方案将用户重定向到您的应用程序,如
    appname://
  • 现在,你在你的电子邮件中发送的链接与正常的URL的链接到你的网站 下面是第2部分:

  • 在你的网站中,你检查你的应用程序是否已安装(cookie已存在)
  • 如果存在,则不打开网站的链接,而是使用适当的值将用户重定向到应用程序,如

    appname://mailbox?sender_is=123&user_name=Lefteris

  • 这可以确保您的电子邮件链接始终有效,并且只有在设备上安装了应用程序时,您才能从Mobile Safari打开这些链接

    最后,请注意,URL方案是
    appname://
    而不是
    http://appname

    现在,为了更好地解释第1部分,在我们的AppDelegate中,我们可以在
    -(BOOL)应用程序:(UIApplication*)应用程序完成启动时使用选项:(NSDictionary*)启动选项
    委托:

    //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"]];
    }
    
    现在在我们的appInsalled页面(例如index.html),我们只需设置一个cookie(我们想要的任何cookie名称),然后将用户踢回我们的应用程序,如下所示:

    <script type="text/javascript">
        window.location = 'appName://';
    </script>
    
    
    window.location='appName://';
    
    我们之所以使用cookie,是为了在用户打开电子邮件链接时使用此cookie。我们将检查浏览器是否为mobile safari,是否安装了cookie。
    这样,我们知道用户已经安装了我们的应用程序,重定向将正常工作。

    类似的功能将更具可扩展性,并且不需要设置cookie或默认值来处理。

    上面标记的答案是正确的,可以正常工作。然而,在iOS 9中,苹果引入了一种新的应用程序,它允许你将特定的web域或web链接(路径)与你的应用程序相关联。如果应用已安装,则可以更轻松地重定向到应用;如果应用未安装,则可以更轻松地重定向到网页

    请注意,对于仍在运行较旧版本的iOS(iOS 9之前)的设备,您可能仍然需要支持Scheme URI(如果应用程序未像安装一样安装,则可能需要使用url链接)


    如果有人感兴趣,我已经记录了我使用通用链接的经验

    是的,它叫a。@ceejayoz谢谢,把它作为答案贴出来,我会接受的。@Eugene我也面临着同样的问题。你能告诉我你是怎么解决的吗?我有Lefteris解决方案,但如何从Safari重定向到应用程序?在哪里调用该.html文件?@Goti向用户的电子邮件发送一个自定义URL方案链接,并让他们打开它iPhone@Eugene我是否需要在我的应用程序网站中创建“appInstalled”页面?因为,对于Android来说,它不需要这个东西。@Lefteris:谢谢你的好答案。我没有完全理解第一部分中的第一步。你能详细说明一下吗?我们的想法是想在移动safari浏览器中添加一个cookie。这是为了验证用户是否安装了我们的应用程序。我编辑我的问题是为了解释更多这是一个很好的答案,但我不需要打开url,它会让用户感到困惑,而且对用户不友好。有没有其他方法来储存safari的饼干?没有,没有其他方法,但这是非常快的。这就像fom FB上的单点登录。这是一瞬间,因为cookie页面只有几个字节……当然,你可以跳过cookie设置,只需将所有具有mobile safari的页面重定向到你的应用程序方案。如果他们没有安装你的应用程序,他们会看到一个错误,但是你可以将他们重定向到appstore,然后。。。解决这个问题的方法是Hi-Altaiar,如果对iOS来说很好,那么如何在android上集成相同的场景呢?你能解释一下吗?