背景

日常使用场景中经常需要从app外部唤起app,比如短信链接,浏览器页面点击按钮等。传统的方式都可以使用android系统自带的拦截url ,也就是schema方式,但这种方式在拦截生效时会弹出所有可以处理此连接的app出来供用户选择,如果用户没有选择我们的app,那么这个唤起也就不成功。现在市面上有很多成熟的方案,目前美菜商城采用的是极光魔链sdk来处理。

极光魔链sdk使用

可以参考极光魔链接入方式 极光魔链 - JMLink 产品简介 - 极光文档

商城接入

  1. 接入依赖

//极光魔链

implementation(rootProject.ext.dependencies["jmlink"]) {

exclude group: 'com.tencent.mm.opensdk'

}

  1. 配置入口

<activity

android:name=".welcome.act.WelComeActivity"

android:enabled="true"

android:icon="@drawable/app_launch_icon"

android:label="${label_name}"

android:screenOrientation="portrait"

android:theme="@style/LauncherAppTheme">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

<intent-filter>

<!-- 为微信打开APP提供入口 -->

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<data android:scheme="wxb75d18e8d4f35a2a" />

</intent-filter>

<intent-filter>

<!-- 为H5打开APP提供入口 -->

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />

<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="meicaistore" />

</intent-filter>

</activity>

  1. 极光魔链平台设置app

  2. 代码初始化

...

private static final String TASK_MW_INIT = "TASK_MW_Init";//魔窗

private static final String TASK_JM_LINK = "Task_Jm_Link";//极光魔链

...

case TASK_MW_INIT:

return new Task(TASK_MW_INIT, false) {

@Override

public void run() {

MainApp.getInstance().getUserPrefs().deepLinkUrl().set("");

registerForMLinkCallback();

if (uri != null) {

redirectUri(uri);

} else {

JMLinkAPI.getInstance().replay(new MyReplayCallback(mContext));

}

}

};

case TASK_JM_LINK:

return new Task(TASK_JM_LINK, false) {

@Override

public void run() {

//极光魔链SDK从浏览器直接转跳到APP具体页面

JMLinkAPI.getInstance().setDebugMode(BuildConfig.TEST_ENTRY);

JMLinkAPI.getInstance().init(mContext.getApplicationContext());

}

};

...

private void registerForMLinkCallback() {

JMLinkAPI.getInstance().registerDefault((map, uri) -> {

if (uri != null) {

LogUtils.e("===jmlink=execute==" + uri.toString());

redirectUri(uri);

}

});

}

/**

* scheme及魔窗短链启动APP指定页面

*

* @param uri intent data

*/

private void redirectUri(Uri uri) {

LogUtils.e("===jmlink===" + uri.toString());

//取出短链中的url,url的value需要encode

String routerUrl = uri.getQueryParameter("url");

if (!TextUtils.isEmpty(routerUrl)) {

LogUtils.e("===jmlink===" + routerUrl);

MainApp.getInstance().getUserPrefs().deepLinkUrl().set(URLDecoder.decode(routerUrl));

} else {

MainApp.getInstance().getUserPrefs().deepLinkUrl().set("");

}

}

...

public void unregisterJMLink() {

JMLinkAPI.getInstance().unregisterDefault();

}

  1. 魔链设置

可以在平台上设备短链接

具体操作可以参考极光魔链接入方式 中接入指南一项 极光魔链 - JMLink 产品简介 - 极光文档

Android外部调起App方案相关推荐

  1. Android 外部调起高德地图显示坐标点 自定义 标注高德地图 by Terry

    下载链接: 点击下载demo 在App开发中,经常想在高德地图上标注我们想要的坐标点.其实这个动作很简单,但是,高德地图API开发文档把这一块藏得太隐蔽了.不太好找. 就几行代码. Intent i ...

  2. Android外部唤醒APP跳转指定页面

    Android外部链接唤醒APP 原理 两个新创的activity H5OpenAppActivity源码 EventJumpActivity 原理 通过scheme协议来唤醒APP. 一.定义一个能 ...

  3. Android中点击链接调起App

    最近工作中的一个需求是点击短信链接则调起App然后完成相关功能逻辑,查阅相关文章完成需求,以此文章来记录Android中点击链接吊起App的实现. 原理 通过使用自定义Scheme方式,修改Schem ...

  4. android智能机顶盒的ota设计,智能机顶盒APP方案开发,让生活更有趣!

    原标题:智能机顶盒APP方案开发,让生活更有趣! 目前的有线存量机顶盒配置低.支撑业务比较少.用户体验也非常差,只能满足基本的看电视需求,并不支持新业务形态,也很难进行新业务拓展,面临用之无味.弃之可 ...

  5. android重复拉起app首页_Android进程管理:Framework层概念

    前情回顾 RickAi,公众号:安卓尖端技术研究Android进程管理:从Kernel到LowMemoryKiller 上一篇文章从Native角度讲解了Android进程管理的相关概念,本文将继续从 ...

  6. 基于Small及Weex的定制化APP方案

    前言 small是android与iOS平台比较出名的轻巧的跨平台插件化框架,也正是被这一点吸引,决定将small应用到集团内部的应用引擎模块化方案中,本篇博文主要讲述本人基于small在androi ...

  7. ios和android测试面试题目,App测试面试题总结

    前言 现在面试个测试岗位,都是要求全能的,web.接口.app啥都要会测,那么APP测试一般需要哪些技能呢? 面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子? 本篇总结 ...

  8. Android APK加壳技术方案----代码实现

    本文章由Jack_Jia编写,转载请注明出处. 文章链接:http://blog.csdn.net/jiazhijun/article/details/8746917 作者:Jack_Jia    邮 ...

  9. Android性能调优篇之探索垃圾回收机制

    开篇废话 如果我们想要进行内存优化的工作,还是需要了解一下,但这一块的知识属于纯理论的,有可能看起来会有点枯燥,我尽量把这一篇的内容按照一定的逻辑来走一遍.首先,我们为什么要学习垃圾回收的机制,我大概 ...

最新文章

  1. Spring 配置文件的差异
  2. 初试Android基于Vuforia开发AR
  3. python standard lib_跟Python Standard Library混个脸熟(一)
  4. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项
  5. excel中match函数_Excel函数轻松学02:详解Excel函数中的数据类型
  6. openwrt开发环境搭建
  7. 《vue+vant 文本超出两行部分省略号显示》
  8. yii2通过url访问类中的方法_行为型设计模式 访问者模式
  9. 赞!卷积神经网络中十大拍案叫绝的操作
  10. (1)webpack介绍
  11. 真心干货:一起学习阿里巴巴数据中台实践!首次公开!
  12. 三菱PLC排故障的方法
  13. 小米路由器4A千兆版c341编程器刷breed.bin详细教程
  14. python 钉钉导出Excel考勤统计
  15. 如何创建水晶报表模板
  16. 将MongoDB安装在移动硬盘
  17. weka分类器怎么设置样本类别_NeurIPS 2020 | 港中文MMLab自步对比学习: 充分挖掘无监督学习样本...
  18. Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“(已解决)
  19. c++ 多边形求交集代码(凸多边形与凸多边形交集)
  20. win10系统查看组件服务器,win10系统查看邮箱服务器信息的技巧介绍

热门文章

  1. silk v3 decoder php,解码转换QQ微信的SILK v3编码音频为MP3或其他格式
  2. [模板] - 快速数论变换 - 航神的传家宝
  3. 安卓APP的HelloWorld
  4. Force Chrome to sync bookmarks
  5. 数据库和数据库表的水平拆分和垂直拆分
  6. 如何查看电脑是多少位系统
  7. 江西省2021年普通高校专升本考试招生实施方案
  8. 数据结构与算法分析——排序算法总结
  9. Datawhale《深度学习-NLP》Task10- Attention原理
  10. 基于java的超市货架商品管理系统