ReactNative实战-短信链接唤起App

1,576 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

前言

上篇我们讲了如何从H5唤起App并跳转指定页面,这次我来分享一下如何从短信链接唤起App。

正文

1、短信唤起App的整个流程

首先我们业务会先发个带链接的短信到手机上,我们进行点击链接,触发唤起App功能,如果已经安装了App,则直接调起打开App,如果没有安装App,则打开浏览器转到下载地址。流程图如下:

image.png

2、安卓(deepLink && appLink)

deeplink

安卓主要通过deeplink技术就可以实现,实际是它也可以看做是一种URL Scheme,不过是 scheme参数需要设置为http或者https的,跟之前的配置一样。需要在react-native工程目录AndroidManifest.xml文件里面增加一个 intent-filter标签,一般放在在MainActivity里面。 代码如下:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="https" android:host="xxx.com" android:pathPattern=".*"
    />
</intent-filter>

现在我们把scheme设置为https,host设置为xxx.com,这样如果手机安装了App,点击访问xxx.com 就可以出现提示使用什么软件打开此地址的窗口,选择自己的App就可以直接打开。

applink

到这里,我们发现点击了短信链接之后,还需要再选择一次自己的App,多了一个选择的步骤,要想省略这个步骤,就得需要到applink功能,applinkdeeplink是差不多的,只不过多了一个流程,就是需要验证。我们在intent-filter 标签加上自动验证属性-android:autoVerify="true",代码如下:

<intent-filter android:autoVerify="true"> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="https" android:host="xxx.com" android:pathPattern=".*"
    />
</intent-filter>

接着我们需要新建一个json文件,命名为assetlinks.json,里面的内容如下:

[    {        "relation": ["delegate_permission/common.handle_all_urls"],
        "target": {
            "namespace": "android_app",
            "package_name": "应用ID",
            "sha256_cert_fingerprints":["签名证书指纹"]
        }
    }
]

上述文件只需要改package_name和sha256_cert_fingerprints成你自己的就可以,其他的不用改,我们看到这个数据结构是数组,所以想验证多个App的时候,可以在里面放相应的数据。sha256_cert_fingerprints这个可以使用keytool工具生成,具体可参考:blog.csdn.net/qq_29364417…

我们得到这个文件之后,让后端上传到服务器,并且是可以通过上面设置的域名(xxx.com ) 能直接访问的,再则必须放到根目录的/.well-known/里面,也就是完整的路径是xxx.com/.well-known… ,直接访问这个文件能拿到数据,如图:

image.png 这样我们访问xxx.com 下的链接就可以直接打开App了。

3、IOS(Universal Link)

ios则是可以使用 Universal Link 技术进行App的跳转,这个功能需要ios 9 以上才可以使用。具体步骤可以参考:www.jianshu.com/p/ef0cd17a3…

4、注意问题

  • 如果是需要Applink或者Universal Link的话,需要域名是https,并且获取得了证书,且外网可以访问,再则不能有重定向。

  • 因为短信是按照字数收费的,所以尽可能的使用短链来发短信。可以在连接后面只带一个字母 + id,到App端的时候再通过这个id去查询参数。例如:xxx.com/s/123

5、安卓兼容问题(测试过的部分机型)

1. 小米手机(MI系统):已实现,点击可不经过浏览器直接调起app;
2. oppo手机:部分实现;
3. 华为手机(非鸿蒙系统):部分实现;
4. 华为手机(鸿蒙系统):暂时无法实现,必须在浏览器选择打开才能调起app。