目的:

1. Cocos2d-x集成openinstall sdk?

有这么一个场景,甲给乙分享了链接,乙使用并下载APP,推荐者甲和乙的关系这个思路是怎样的?

你首先想到的也许会说,那当然就是给对方一个邀请码去辨识啊。

1、扫码下载,二维码里面有甲的推荐邀请号

2、APP下载包在本服务器上下载,通过地址也是可以知道甲的邀请信息

3、在APP下载输入甲的邀请码

没错,这个是可以实现的,但是只是传统的做法,用户转化率严重低下。
另一种更创新性的实现方式就是:最近在使用一个叫openinstall的SDK,可以实现无码安装实现上述的场景,提高用户的转化率。通过它实现免填邀请码的功能,集成到Cocos2d-x游戏开发中。对App安装流程的优化,尤其是免填写邀请码安装,App推广的有奖邀请活动更大程度的达到推广爆炸式的效果。

在分享链接自定义各种动态参数(如推广渠道号,邀请码,游戏房间号,用户id等等)。通过在分享链接url中附带app邀请人的用户id,就可达到免填邀请码的效果;或者app通过在url中附带游戏房间号实现直达游戏房间也可建立上下级关系;Cocos2d-x开发中免不了邀请用户获得奖励;新老用户直达游戏场景;从各种浏览器一键拉起游戏场景等等。

那么如何在cocos2d-x集成openinstall呢?

一:环境配置

SDK,NDK,AN的配置请看 http://www.cnblogs.com/studweijun/p/4320778.html

1. 将新建的项目导入AndroidStudio,选项目里的pro.android-studio文件夹导入。

2.跳出主窗口后会跳出两个小窗口提示,一个窗口Gradle更新,一个是插件更新,没有的话继续,有的话可以更新

3.导入好的项目如下图,如果不是这个结构,请重新导入.

4. 现在开始配置ndk的编译,选中菜单栏的Run  -> Edit Configurations

5.然后选中+,添加外部工具

6.继续点+号

7.设置工具属性

8.然后点击两个ok后回到下面界面上

9.选中,1,点击上移,2,Apply,3,然后点击OK

10. 点击ok,编译设置完毕,可以试着运行一下看看,是否编译了.

说明:起初项目编译不通过,老报同样的错误,通过网上找资料,发现我的ndk版本可能下错了,换成android-ndk-r9d,发现Cocos2d-x3.x对NDK的要求r9d

Ndk换成android-ndk-r9d重新编译通过~

二:接下来就是集成openinstall流程了:

1. 注册/登录openinstall开发者平台http://developer.openinstall.io/并创建应用

2. 下载导入SDK

3.新建自定义Application类 APP继承Application并初始化

App启动时,调用OpenInstall.init(context)方法完成sdk初始化;以下以自自定义APP为例

public class APP extends Application {  

    @Override
    public void onCreate() {
        super.onCreate();
        OpenInstall.init(this);
    }
}

  

4.在AppActivity中编写代码
public class AppActivity extends Cocos2dxActivity {  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       // 在唤醒页面中如下调用相关代码,获取web端传过来的自定义参数
        OpenInstall.getWakeUp(getIntent(), wakeUpAdapter);  

       // 在APP需要个性化安装参数时(由web网页中传递过来的,如邀请码、游戏房间号等自定义参数),
        // 调用OpenInstall.getInstall方法,在回调中获取参数(可重复获取)
        getInstall();
    }  

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        // 此处要调用,否则App在后台运行时,会无法截获
        OpenInstall.getWakeUp(intent, wakeUpAdapter);
    }  

    AppWakeUpAdapter wakeUpAdapter = new AppWakeUpAdapter() {
        @Override
        public void onWakeUp(AppData appData) {
            //获取渠道数据
            String channelCode = appData.getChannel();
            //获取绑定数据
            String bindData = appData.getData();
            Log.d("OpenInstall", "getWakeUp : wakeupData = " + appData.toString());
            Toast.makeText(AppActivity.getContext(),"wakeup:"+appData.toString(),Toast.LENGTH_SHORT).show();
        }
    };  

    @Override
    protected void onDestroy() {
        super.onDestroy();
        wakeUpAdapter = null;
    }  

    public void getInstall(){
        //获取OpenInstall数据
        final SharedPreferences sp = getSharedPreferences("cocosdemo", MODE_PRIVATE);
        boolean needInstall = sp.getBoolean("needInstall", true);
        if (needInstall) {  //是否需要多次调用getInstall获取参数  

            OpenInstall.getInstall(new AppInstallListener() {
                @Override
                public void onInstallFinish(AppData appData, Error error) {
                    if (error == null) {
                        if (appData == null || appData.isEmpty()) return;
                        OpenInstall.reportRegister();//注册上报统计
                        Log.d("openinstall", "reportRegister success");
                        //获取自定义数据
                        Log.d("OpenInstall", "getInstall : bindData = " + appData.getData());
                        //获取渠道数据
                        Log.d("OpenInstall", "getInstall : channelCode = " + appData.getChannel());  

                        //使用数据后,不想再调用,将needInstall设置为false
                        sp.edit().putBoolean("needInstall", false).apply();
                        Toast.makeText(AppActivity.getContext(), "install:" + appData.toString(), Toast.LENGTH_SHORT).show();
                    } else {
                        Log.e("OpenInstall", "getInstall : errorMsg = " + error.toString());
                    }
                }
            });
        }
    }  

}

  

 

5. 配置AndroidManifest.xml

1,在AndroidManifest.xml中添加权限声明

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 2,在AndroidManifest.xml的application标签内设置AppKey

在AndroidManifest.xml中的application标签中添加android:name=".APP"指定自定义的Application类,以便程序启动的时候初始化自定义Application类,而不是系统默认的Application类

在AndroidManifest.xml的唤醒页面activity标签中添加intent-filter(一般为MainActivity),配置scheme,用于浏览器中拉起

6:打包上传安装包到openinstall后台测试:

测试

最后贴上demo下载地址:https://github.com/AnneCR/Cocos2D-openinstall

Cocos2d-x 集成openinstall(Android)的更多相关文章

  1. unity集成openinstall流程

    目的 1.Unity集成openinstall sdk? 最近在使用一个叫openinstall的SDK,通过它实现免填邀请码的功能,集成到unity游戏开发中.对App安装流程的优化,尤其是免填写邀 ...

  2. Weex的环境搭建以及集成到Android项目

    最近由于公司的需要,初步研究了Weex,Weex是阿里开发的一个web的框架,官方的介绍如下: Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能.可扩展的 native 应 ...

  3. 将React Native集成至Android原生应用

    将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...

  4. 将linux和uboot集成到Android编译框架中

    span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...

  5. OpenCV3.4.1快速集成到Android studio中,10分钟搞定

    OpenCV3.4.1快速集成到Android studio中,10分钟搞定     转载 https://blog.csdn.net/yu540135101/article/details/8259 ...

  6. Jenkins 持续集成实现 Android 自动化打包

    打 debug 包流程: git pull 分支最新代码 Android Studio:Build - Generate Signed APK 从 IDE 里可以看到,实际上该操作是执行了 assem ...

  7. unity3d与eclipse集成开发android应用

    原地址:http://blog.csdn.net/armoonwei/article/details/7032537 Unity as a Library Once you have eclipse ...

  8. 面向基于英特尔&#174; 架构的 Android* 的 CoCos2D

    Cocos2D 是一款游戏引擎,可与从电脑到手机等多种设备配合使用. 该引擎支持丰富的特性,可帮助创建出色的 2D 游戏.它甚至包含具备全面功能的物理引擎. CoCos2D 的核心元素是基本动画元素( ...

  9. Kotlin与Android SDK 集成(KAD 05)

    作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...

随机推荐

  1. NDK 开发中,各种指令集的坑,arm64

          最近在NDK开发中遇到了一个奇怪的问题,希望记录下,可以帮到大家:         我编译了一些 .so 动态库,只编译了armeabi-v7a.armeabi 指令集,其它指令集编译不了 ...

  2. ARM平台的虚拟化介绍

    本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等. 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种 ...

  3. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  4. 如何写出测不出bug的测试用例

    我们写测试用例的目的是为了能够整理思路,把要测试的地方列出来,做为知识的积淀,用例可以交给其他测试人员执行,或者是跟需求提出者进行讨论,对用例进行补充和修改. 理论上用例写的越多,越容易发现bug.但 ...

  5. python中重要的模块--asyncio

    一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asynci ...

  6. 使用Socket对序列化数据进行传输(基于C#)

    客户端代码 [Serializable] // 表示该类可以被序列化 class Person{ public string name; public void HI() { Debug.Log(na ...

  7. 在linux系统中

    A .etc下放置配置文件 B./var下放置日志文件 C./root超级用户主目录 D./home 使用者家目录 /bin  二进制执行文件,也就是命令文件 /etc 下存放的是配置文件 /dev ...

  8. AWS EC2 通过Linux终端:使用ssh连接到Linux实例

    AWS的ubuntu主机登录用户是ubuntu 只能通过秘钥的方式登录 如果在linux终端通过ssh远程登录步骤如下: 假如申请EC2主机的时候下载的key名称叫my-key.pem,并保存在本地l ...

  9. 决策树学习笔记(Decision Tree)

    什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...

  10. php学习笔记upset函数。

    如果在函数中我们不希望再使用某个变量.可以使用unset()销毁函数, ②在php函数中,我们可以给某些参数赋一个默认初值. ③可以传一个默认的参数. ④php在传递变量的时候,默认是传递值传递,如果 ...