Android开发经验谈Android知识

还在用邀请码邀请注册吗?落后咯!!!我家APP自带邀请码的

2017-10-14  本文已影响2482人  间歇性丶神经病患者

前言

      来来来,假设有这样一个场景,我邀请某人去下载注册一个app,这样他能获得奖励,我也可以获得奖励,那怎么匹配邀请人与被邀请人呢?
      那你肯定要说了,这还不简单,邀请码啊,每个用户有自己唯一的邀请码,被邀请方下载注册后填写对应的邀请码,这不就好了吗?
      然而...不麻烦吗???
      如果哥哥我的app自己带有邀请码,那得多方便啊!!
      推荐下载app的流程一般是:

丑丑的推荐下载App流程
      我们可以看到,这里有一个很重要的中转站→浏览器。那我们是不是可以从这里做文章呢!
      如果我们可以在浏览器打开的时候,把邀请码作为参数传递过去,那不就天下太平一见生财了嘛!嘿嘿,这里推荐下一篇:Android 通过浏览器打开手机app
      但是这种的话,并不能保证用户一定可以拿到链接传递的参数!毕竟这种是要在已经安装了App的情况下,才可以拿到参数,所以这种是不可取的。
      所以,这里该推出我们的主角了:OpenInstall

集成

集成jar包
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

App_key配置

  <!--openInstall 的appKey -->
        <meta-data
            android:name="com.openinstall.APP_KEY"
            android:value="ipriom"/>
        <!--end of openInstall 的appKey -->

配置获取参数的Activity

  <!--主页面-->
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="adjustPan|stateHidden">
            <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="op4nd2v6"/>
            </intent-filter>
        </activity>

注意事项

注意事项

假设你的默认启动页是MainActivity,那么最好不要把2个 <intent-filter/>混搭在一起

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

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
 <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="op4nd2v6"/>
            </intent-filter>

在onCreate()中配置

 if (isMainProcess()) {
            OpenInstall.init(this);
            OpenInstall.setDebug(true);
        }
 /**
     * 判断是否是主进程
     *
     * @return
     */
    public boolean isMainProcess() {
        int pid = android.os.Process.myPid();
        ActivityManager activityManager = (ActivityManager) getSystemService
                (Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo appProcess : activityManager
                .getRunningAppProcesses()) {
            if (appProcess.pid == pid) {
                return getApplicationInfo().packageName.equals(appProcess.processName);
            }
        }
        return false;
    }
#忽略警告
-dontwarn com.fm.openinstall.**
#避免混淆
-keep public class com.fm.openinstall.* {*; }
  1. 在oncreate()中设置唤醒App时获取参数回调:
 /**
     * 设置获取唤醒app时获取参数回调
     */
    private void getWakeUpInfo() {
        OpenInstall.getWakeUp(getIntent(), this);
    }
  1. 获取唤醒App时传递过来的参数
  @Override
    public void onWakeUpFinish(AppData appData, Error error) {
        XLog.e(error == null ? appData.toString() : error.toString());
    }
  1. 配置onNewIntent
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //此处要调用,否则App在后台运行时,会无法截获
        OpenInstall.getWakeUp(intent, this);
    }

以上的话,其实我们可以自己实现,通过上面提供的文章,这步我们完全可以自己做到。
但是另外一个方法,目前博主也想不出来是怎么实现的:

 /**
     * 获取安装的时候从web端传递过来的参数信息
     */
    private void getInfo() {
        OpenInstall.getInstall(new AppInstallListener() {
            @Override
            public void onInstallFinish(AppData appData, Error error) {
                if (error == null) {
                    if (appData == null) {
                        return;
                    }
                    if (!TextUtils.isEmpty(appData.getData())) {
                        Toast.makeText(MainActivity.this, "从网页唤醒app" + appData.toString(), Toast.LENGTH_SHORT).show();
                    }
                } else {
                    XLog.e("error--------------" + error.toString());
                }
            }
        });
    }

这里我们解释下两个方法的区别:
getInfo
onWakeUpFinish
上面的是首次安装走的回掉,下面的是app已经存在,网页直接唤醒app走的回掉,场景不同。

这里是不是已经有点蒙了呢!看下哥们之前写的测试文档:

测试

 https://app-ipriom.openinstall.io/js-test?
testKey=11111111&testKey2=3333333333333333333333

testKey=11111111&testKey2=3333333333333333333333可以随意添加,其实就是get请求参数。

运行的界面 首次运行为下载 获取到传递的参数 二次运行的页面

这里是不是已经可以看出端倪了呢!

到了这里,其实已经满足了我们的需求了!

流程

测试

我们比较关心的是兼容问题,这边博主也花了一点时间去做测试:
测试:

  1. 手机安装有app
  2. 该app至少被打开过一次
  3. 与网络是否切换无关
    **测试列表:

测试总结:

1.url我可以随便拼装
2.UC,QQ,原生都可以拉起应用
3.每次更新app都需要重新上传一个app到你们那里
4.加固混淆不影响该功能

总结:

1.基本满足了我们的需求
2.我们每次更新版本需要提交到openInstall的后台托管中(保证后续更新稳定),也可以直接托管到应用宝等平台,这样在鹅厂旗下的浏览器会提供支持(微信内置浏览器)

上一篇 下一篇

猜你喜欢

热点阅读