unity集成openinstall流程

目的android

一、Unity集成openinstall sdk?web

最近在使用一個叫openinstall的SDK,經過它實現免填邀請碼的功能,集成到unity遊戲開發中。對App安裝流程的優化,尤爲是免填寫邀請碼安裝,App推廣的有獎邀請活動更大程度的達到推廣爆炸式的效果。瀏覽器

在分享連接自定義各類動態參數(如推廣渠道號,邀請碼,遊戲房間號,用戶id等等)。經過在分享連接url中附帶app邀請人的用戶id,就可達到免填邀請碼的效果;或者app經過在url中附帶遊戲房間號實現直達遊戲房間也可創建上下級關係;unity開發中免不了邀請用戶得到獎勵;新老用戶直達遊戲場景;從各類瀏覽器一鍵拉起遊戲場景等等;app

那麼如何在unity集成openinstall呢?話很少說,上圖吧~ 哈哈ide

二、註冊/登陸openinstall開發者平臺http://developer.openinstall.io/並建立應用測試

先在AndroidStudio中工做gradle

  1. 新建工程優化

    只須要注意,AndroidStudio(如下簡稱AS)中新建項目的包名和Unity發佈安卓時候設置的包名要一致。ui

2.導入jar包this

將Unity路徑下的接口classes.jar導入到AS的libs目錄下,而後sync一下項目。接口包所在地:(E:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar)
複製代碼

一樣的,到openinstall官網去下載openinstall_vx.x.x.jar放到AS的libs目錄下,sync一下項目

3.編寫MainActivity代碼

編寫MainActivity繼承自UnityPlayerActivity

public class MainActivityextends UnityPlayerActivity {//一、注意修改集成的類,改爲UnityPlayerActivity

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //setContentView(R.layout.activity_main);  //二、去掉這一行

    OpenInstall.getWakeUp(getIntent(), wakeUpAdapter);//獲取喚醒參數

    getInstall();//個性化安裝

}
複製代碼

@Override

protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);

    // 此處要調用,不然App在後臺運行時,會沒法截獲

    OpenInstall.getWakeUp(getIntent(), wakeUpAdapter);

}
複製代碼

@Override

protected void onDestroy() {

    super.onDestroy();

    wakeUpAdapter =null;

}


/**
 * 在APP須要個性化安裝參數時(由web網頁中傳遞過來的,如邀請碼、遊戲房間號等自定義參數)
 * 調用OpenInstall.getInstall方法,在回調中獲取參數(可重複獲取)
 * 適用於免填邀請碼安裝,自動加好友,渠道統計等安裝來源追蹤的解決方案
 */
private void getInstall() {
    final SharedPreferences sp = getSharedPreferences("unitydemo", MODE_PRIVATE);
    boolean isInstall = sp.getBoolean("unityFirst", true);
    //是否須要屢次調用getInstall獲取參數
    Log.d("openinstall", "getInstall");
    //獲取OpenInstall數據,去掉外層的if判斷就能夠重複屢次調用,推薦每次須要的時候調用,而不是本身保存數據
    if (isInstall) {
        OpenInstall.getInstall(new AppInstallListener() {
            @Override
            public void onInstallFinish(AppData appData, Error error) {
                Log.d("OpenInstall ", "InstallFinish");
                if (error == null) {
                    //根據本身的業務處理返回的數據
                    // 此處保存到本地,方便給unity調用
                    sp.edit().putString("unityinstall", appData.toString()).apply();
                    //使用數據後,不想再調用,將unityFirst設置爲false
                    sp.edit().putBoolean("unityFirst", false).apply();
                    Toast.makeText(MainActivity.this, "getInstall:" + appData.toString(), Toast.LENGTH_SHORT).show();
                    Log.d("getInstall:", "" + appData.toString());
                } else {
                    Log.e("MainActivity", "errorMsg : " + error.toString());
                }
            }
        });
    }
}
複製代碼

AppWakeUpAdapter wakeUpAdapter = new AppWakeUpAdapter() { @Override public void onWakeUp(final AppData appData) { //獲取渠道數據 String channelCode = appData.getChannel(); //獲取綁定數據 String bindData = appData.getData(); Log.d("OpenInstall", "getWakeUp : wakeupData = " + appData.toString());

//根據本身的業務處理返回的數據
        // 此處保存到本地,方便給unity調用
        final SharedPreferences sp = getSharedPreferences("unitydemo", MODE_PRIVATE);
        sp.edit().putString("unitywakeup", appData.toString()).apply();
    }
};
複製代碼

/** * 添加一個方法用於給unity調用 */ public String ShowWakeup() { final SharedPreferences sp = getSharedPreferences("unitydemo", MODE_PRIVATE); return sp.getString("unitywakeup", null); }

public String ShowInstall() {
    final SharedPreferences sp = getSharedPreferences("unitydemo", MODE_PRIVATE);
    return sp.getString("unityinstall", null);
}

public void reportRegister() {
    /*
    如需統計每一個渠道的註冊量(對評估渠道質量很重要),
    可根據自身的業務規則,在確保用戶完成app註冊的狀況下,調用OpenInstall.reportRegister()上報註冊量。
    */
    OpenInstall.reportRegister();
    Log.d("Openinstall ", "success");

}
複製代碼

4.自定義Application類 APP繼承Application並初始化

  1. 修改AndroidManifest.xml

在AndroidManifest.xml中添加權限聲明,設置AppKey,配置scheme

配置AndroidManifest.xml 在AndroidManifest.xml中的application標籤中添加 android:name=".App"指定自定義的Application類,以便程序啓動的時候初始化自定義Application類,而不是系統默認的Application類

自定義APP 6. 修改build.gradle

修改build.gradle 7.生產arr包

Build->Build APK成功會在app\build\outputs\aar目錄下出現一個app-debug.aar包(此處是debug包),而後用解壓軟件打開這個包,刪掉libs下的classes.jar(沒錯,就是以前重unity中拷過來的) 由於unity打包時會從新把自帶的classes.jar打進去,若是不刪掉它會打包報錯,衝忽然後這就是最終須要的aar包,把aar包解壓縮,看到classes.jar(此處的classes.jar是項目build出來的,不等同於AS中libs文件中的classes.jar),把aar包下的classes.jar和AndroidManifest.xml都放在一個地方等待在unity中使用

成功導出arr包並解壓出classes.jar
Unity中調用

Unity新建一個工程,設置jdk,安卓的SDK。

設置SDK,JDK 而後在Assets目錄下新建咱們須要的目錄,Assets\Plugins\Android,並把AndroidManifest.xml放到裏面。

導入AndroidManifest.xml
而後在Assets目錄下新建咱們須要的目錄,Assets\Plugins\Android\libs,並把aar包下的classes.jar和openinstall_vx.x.x.jar放到裏面。

放置jar Unity調用android方法

新建腳本AndroidNative.cs調用android方法(反射機制獲取android方法)

根據本身的業務需求調用方法,如

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

AndroidJavaObject jo = jc.GetStatic("currentActivity"); string data =jo.Call("ShowWakeup"); 打包上傳安裝包到openinstall後臺測試:

上傳安裝包 上傳apk安裝包後,可先使用openinstall提供的在線測試功能,確保app安裝後能正確還原輸入的動態參數,能正常的拉起App。

測試 注意:拿到openinstall回調數據後,具體的業務可具體處理!

相關文章
相關標籤/搜索