使用我的网址方案作为链接从SMS打开应用程序

时间:2014-04-11 11:08:00

标签: ios url-scheme

我在我的应用中声明了一个网址方案smstest,所以在Safari中我可以在搜索栏smstest:my-testsmstest://my-test中写一下,我的应用就是开放的。

我正在尝试通过短信文字实现相同功能,因此消息应用会将smstest:my-testsmstest://my-test格式化为链接,用户可以点按它并调用我的应用。但是文本没有格式化为链接。

是否可以或者从SMS打开应用程序的唯一解决方案是指向带有脚本的Internet页面?

谢谢。

编辑:有趣的是,我已经安装了IMO Messenger,我收到了一个带有代码作为URL方案的短信,并由Messages app作为链接解析。为什么我的应用程序没有发生?我尝试了几条消息,在url之前和之后都有空格,没有任何反应。

2 个答案:

答案 0 :(得分:19)

通常,有一种使用url方案从消息应用程序打开应用程序的标准方法:

  1. 将网址添加到info.plist文件:my-scheme。
  2. 将应用程序安装到目标iPhone。
  3. 使用以下文字发送短信:“my-scheme:// it-is-my-scheme。
  4. 一切都运作良好。 这可能是一个有趣的案例,当它不起作用,你认为源代码是错误的。但事实并非如此。我们试着调查一下这个案子:

    1. 在添加url方案和安装应用程序之前发送短信。正如预期的那样,消息将显示为纯文本:
      First SMS

    2. 现在让我们将网址添加到info.plist:
      Info.plist

    3. 最后安装应用程序并发送/接收相同的短信:
      Second SMS

    4. 如您所见,上一条消息显示为链接,如果我点击它,则iOS会打开我的应用程序。 第一条消息仍然显示为纯文本,并且不可点击。消息app的逻辑似乎是以这种方式实现的。

      现在让我们从iPhone删除应用程序并再次发送相同的短信:
      Third SMS
      现在它再次显示为纯文本,但第二条消息 - 作为链接。如果我点击它,iOS什么都不做,并打开消息应用程序。

      结论:确保在安装支持您的方案的应用程序后发送/接收SMS。只有在这种情况下,它才会显示为链接,用户可以通过点击它来打开您的应用程序。

      注意:我还发现一个案例,当安装应用程序时没有支持的url方案,然后当我添加此支持消息时,显示为纯文本但不显示为链接。我无法重现它。但如果上述步骤无法解决您的问题,请尝试:

      1. 从iPhone移除应用程序;
      2. 更改网址方案(甚至更改两者:网址方案和捆绑ID作为最后手段);
      3. 再次安装;
      4. 使用新的网址方案发送短信。

答案 1 :(得分:5)

编辑:

我刚试过一个应用程序在短信机构上发送我的网址方案并且工作了。 它必须具有此格式smstest://my-test

当你收到短信工作时,必须安装app并在info.plist上声明url方案。

我添加了使用不同网址方案收到的短信截图,所有这些都被iPhone短信应用认可

SMS URL SCHEMES

如果仍然无效,请尝试实施并让他们返回YES

application: handleOpenURL:application: openURL:sourceApplication: annotation:

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
{
    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return YES;
}

这个旧答案是关于你在评论中要求的JS重定向。

我使用此功能将网页重定向到app,并在未安装应用的情况下回退到iTunes网址

var now = new Date().valueOf();
setTimeout(function () {
    if (new Date().valueOf() - now > 100) return;
    window.location = "http://itunes.apple.com/yourappurl";
}, 25);
window.location = "smstest://my-test";