1. 程式人生 > >unity集成openinstall流程

unity集成openinstall流程

unity openisntall 個性化安裝 免填邀請碼 一鍵加入遊戲房間

目的

1、Unity集成openinstall sdk?

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

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

那麽如何在unity集成openinstall呢?話不多說,上圖吧~ 哈哈

2、註冊/登錄openinstall開發者平臺http://developer.openinstall.io/並創建應用

先在AndroidStudio中工作

  1. 新建工程

    只需要註意,AndroidStudio(以下簡稱AS)中新建項目的包名和Unity發布安卓時候設置的包名要一致。

2.導入jar包

  將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

import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  

import com.fm.openinstall.OpenInstall;  
import com.fm.openinstall.listener.AppInstallListener;  
import com.fm.openinstall.listener.AppWakeUpAdapter;  
import com.fm.openinstall.model.AppData;  
import com.fm.openinstall.model.Error;  
import com.unity3d.player.UnityPlayer;  
import com.unity3d.player.UnityPlayerActivity;  

public class MainActivity extends UnityPlayerActivity {//1、註意修改集成的類,改成UnityPlayerActivity  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        getInstall();//個性化安裝  
        OpenInstall.getWakeUp(getIntent(), wakeUpAdapter);//獲取喚醒參數  
    }  

    @Override  
    protected void onNewIntent(Intent intent) {  
        super.onNewIntent(intent);  
        OpenInstall.getWakeUp(intent, wakeUpAdapter);  
    }  

    AppWakeUpAdapter wakeUpAdapter = new AppWakeUpAdapter() {  
        @Override  
        public void onWakeUp(final AppData appData) {  
            //獲取渠道數據  
            String channelCode = appData.getChannel();  
            //獲取綁定數據  
            String bindData = appData.getData();  
            //回調數據 對象名稱,腳本方法,返回的數據  
            UnityPlayer.UnitySendMessage("Main Camera","wakeup","data="+bindData+";channelCode="+channelCode);  

        }  
    };  

    /** 
     * 在APP需要個性化安裝參數時(由web網頁中傳遞過來的,如邀請碼、遊戲房間號等自定義參數) 
     * 調用OpenInstall.getInstall方法,在回調中獲取參數(可重復獲取) 
     * 適用於免填邀請碼安裝,自動加好友,渠道統計等安裝來源追蹤的解決方案 
     */  
    public void getInstall() {  

        //獲取OpenInstall數據,去掉外層的if判斷就可以重復多次調用,推薦每次需要的時候調用,而不是自己保存數據  
            OpenInstall.getInstall(new AppInstallListener() {  
                @Override  
                public void onInstallFinish(AppData appData, Error error) {  
                    Log.d("OpenInstall ", "InstallFinish");  
                    if (error == null) {  
                        //根據自己的業務處理返回的數據  
                        String data = appData.getData();  
                        String channelCode = appData.getChannel();  
                        //回調數據 對象名稱,腳本方法,返回的數據  
                        UnityPlayer.UnitySendMessage("Main Camera","install","data="+data+";channelCode="+channelCode);  
                    } else {  
                        Log.e("MainActivity", "errorMsg : " + error.toString());  
                    }  
                }  
            });  
    }  

    //數據上報統計  
    public void reportRegister(){  
        OpenInstall.reportRegister();  
    }  

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

}  

4.自定義Application類 APP繼承Application並初始化
技術分享圖片

  1. 修改AndroidManifest.xml
    技術分享圖片

在AndroidManifest.xml中添加權限聲明,設置AppKey,配置scheme
技術分享圖片

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

技術分享圖片

  1. 修改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中使用
技術分享圖片

Unity中調用

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

技術分享圖片

最後在Assets目錄下新建我們需要的目錄,Assets\Plugins\Android,並把AndroidManifest.xml放到裏面。
技術分享圖片

然後在Assets目錄下新建我們需要的目錄,Assets\Plugins\Android\libs,並把aar包下的classes.jar和openinstall_vx.x.x.jar放到裏面。
技術分享圖片

Unity調用android方法

在Camera main中新建腳本Main.cs調用android方法(反射機制獲取android方法)

根據自己的業務需求調用方法,如

public class Main : MonoBehaviour {  
    public Text txtWakeup;  
    public Text txtInstall;  

    void Start()  
    {  
        txtWakeup = GameObject.Find("Canvas/txtWakeup").GetComponent<Text>();  
        txtInstall = GameObject.Find("Canvas/txtInstall").GetComponent<Text>();  

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");  
        jo.Call("getInstall");  
        //jo.Call("reportRegister"); //上報註冊統計  
        txtWakeup.text = "喚醒參數";  
        txtInstall.text = "安裝參數";  
    }  

    //接收Android回調的數據 wakeup方法  
    void wakeup(string str)  
    {  
        txtWakeup.text = str;  
    }  

    //接收Android回調的數據,install方法  
    void install(string str)  
    {  
        txtInstall.text = str;  
    }  
}  

打包上傳安裝包到openinstall後臺測試:
技術分享圖片

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

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

demo下載地址:https://github.com/AnneCR/unity-openinstall/tree/master

unity集成openinstall流程