列表内容
最近完成项目里一些功能所以空闲时间比较多,但是最近老大让我们在项目里加入深度链接功能,一开始听到深度链接这个词我有点懵X,什么鬼没听说过啊!硬着头皮去网上查资料啊!结果发现已经有专门公司已经集成了Deep Link SDK。但是在网上也有不用SDk可以实现的方法。当然我们是选择不花钱的方式去完成了。不废话直接进入主题。
我们应用中深度链接是通过应用宝的微链接实现的,实现这一功能还需要与公司的后台做相应的配合,而在移动前端代码中几处做相应的配置就行了。首先要在一个Activity接收深度链接后台传过来的数据,在AndroidManifest.xml清单文件中的对应的activity添加一个隐式意图(intent-filter)`
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="包名"
android:scheme="域名"/>
</intent-filter>`
其中关键配置是data节点中的host配置为APP的包名,scheme配置和服务器约定好。接下来就会在相应的Activity中接受intent-filter传递过来的数据,代码如下:
private String scheme
private Intent intent
intent = getIntent()
if(intent ==null) return
scheme = intent.getScheme()
if (scheme!=null&&TextUtils.equals(scheme,AppConstant.ACTIVITY_SCHEME)){
Uri uri = intent.getData()
String detaillink = uri.getQueryParameter("detaillink")
String title = uri.getQueryParameter("title")
String type = uri.getQueryParameter("type")
String typeId = uri.getQueryParameter("typeId")
String staticlink = uri.getQueryParameter("staticlink")
String titleimage = uri.getQueryParameter("titleimage")
NewsBean news = new NewsBean()
news.setDetaillink(detaillink)
news.setStaticlink(staticlink)
news.setTitle(title)
news.setType(type)
news.setId(typeId)
news.setTitleimage(titleimage)
Intent intent1 = new Intent(WelcomeActivity.this, ArticleActivity.class)
intent1.putExtra("linkedArticle",true)
intent1.putExtra(AppConstant.putExtra_WebView_Name,news)
startActivity(intent1)
AAnim.ActivityStartAnimation(WelcomeActivity.this)
WelcomeActivity.this.finish()
}
但是在测试的过程中,发现了一个比较坑的问题,例如我们从微信朋友圈里点击分享的文章会跳到APP指定页面。但是这时候应用退到后台杀死进程再次进行深度链接时,深度链接功能失效。查阅资料也没有找到相应的解决办法,小民我真的是陷入了一片苦恼之中,疯狂地查阅资料和咨询前辈给予经验。终于这个bug被解决了。上代码实例:
<activity
android:name=".activity.WelcomeActivity"
** android:alwaysRetainTaskState="true"
** android:launchMode="singleTask"
** android:noHistory="true"
android:theme="@style/WelcomeTheme">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="包名"
android:scheme="域名"/>
</intent-filter>
</activity>
其实在对应的Activity之中配置带有**的那几个属性bug就解决了,其实具体原因我也不是很清楚,可能就是删除了历史缓存和android的登录模式的关系吧!如果有大神知道欢迎指导。纯属个人开发过程中的遇坑心得。