深度链接 Deep Link 开发遇到的坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/helin_wang/article/details/60136687
列表内容
最近完成项目里一些功能所以空闲时间比较多,但是最近老大让我们在项目里加入深度链接功能,一开始听到深度链接这个词我有点懵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的登录模式的关系吧!如果有大神知道欢迎指导。纯属个人开发过程中的遇坑心得。
阅读更多

没有更多推荐了,返回首页