MobPush Android For Unity

語言: CN / TW / HK

整合準備

註冊賬號

使用MobSDK之前,需要先在MobTech官網註冊開發者賬號,並獲取MobTech提供的AppKey和AppSecret,詳情可以點選檢視註冊流程

下載MobPush對應的.unitypackage包

開啟 Github 下載 MobPush-For-Unity 專案,下載完成後直接雙擊或者在Unity裡面選擇開啟 MobPush.unitypackage,匯入相關資源和指令碼到您的 Unity專案即可使用。

整合

注:MobPush For Unity專案對應的Android外掛部分,使用的是gradle編譯方式,由於gradle編譯方式在Unity2017及以上版本才能很好地支援並且相容,

強烈建議廣大開發者使用Unity2017及以上的版本進行開發,

Unity2017以下版本整合稍微麻煩一丟丟;

所以集成核心部分分成:

(1)新版Unity整合方式(Unity2017及以上的版本)

(2)舊版Unity整合方式注意事項(使用Unity2017版本以下開發的必看)

Unity整合方式(建議)

圖片.png

關鍵檔案:

mainTemplate.gradle和proguard-user.txt

1、Unity2017及以上版本,在Build Settings > Player Settings下面,有兩個開關,新建專案的話開啟這兩個開關就可以在Plugins>Android生成對應的兩個檔案;由於這兩個檔案MobPush都有直接提供,只需匯入.unitypackage就好,Unity檢測到已經存在這兩個檔案,自動會更新為勾選狀態;

2、Build的時候有一個Build System選項,此選項預設選擇的Internal,切記要改成選擇裡面的gradle選項(重要

3、圖中所示的mainTemplate.gradle檔案,即為整合的核心檔案,使用編輯器開啟此檔案,要點內容如下:

此處為區分Unity5.6和Unity2017 gradle外掛版本的地方,開發時用到哪個版本就使用哪個,若使用到其他Unity版本,請隨意選擇一個,然後build,編譯的時候會報錯的,Console控制檯資訊報錯時會提示外掛版本是多少,根據提示修改成需要的版本就好(只修改後面的數字,比如:2.3.0或者2.1.0)

buildscript {
    repositories {
          // 配置Mob Maven庫
        maven {
           url "https://mvn.mob.com/android"
        }
      // 配置HMS Core SDK的Maven倉地址。(整合華為廠商需要新增)
        maven {
           url 'https://developer.huawei.com/repo/'}
        }
        ...
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'//Unity2017
        //classpath 'com.android.tools.build:gradle:2.1.0'//Unity5.6
        // 註冊MobSDK
        classpath "com.mob.sdk:MobSDK:2018.0319.1724"
    }
}

此處為整合MobPush需要配置的資訊

// 新增外掛
apply plugin: 'com.mob.sdk'

// 在MobSDK的擴充套件中註冊MobPush的相關資訊
MobSDK {
appKey "替換為MobTech官方申請的appkey"
appSecret "替換為MobTech官方申請的appkey對應的appSecret"

MobPush {
    //整合其他推送通道(可選)
    devInfo {
        //華為推送配置資訊
        HUAWEI{
            appId "華為的appid"
        }

        //魅族推送配置資訊
        MEIZU{
            appId "魅族的appid"
            appKey "魅族的appkey"
        }

        //小米推送配置資訊
        XIAOMI{
            appId "小米的appid"
            appKey "小米的appkey"
        }
        //FCM推送通道配置 
        FCM{ 
            //設定預設推送通知顯示圖示 
            iconRes "@mipmap/ic_launcher" 
        }
    }
}

此處為配置簽名檔案和簽名檔案的別名和密碼(正式釋出apk需要的簽名檔案),可以寫絕對路徑,也可以寫相對路徑,相對路徑使用”..\”跳出一層目錄,跳出多層則連續拼接

signingConfigs {
        release {
            keyAlias 'demokey.keystore'
            keyPassword '123456'
            storeFile file('F:\\Unitydemo(CJY)\\MobPushForUnity\\Assets\\Plugins\\Android\\demokey.keystore')
            storePassword '123456'
        }
}

此處為混淆檔案的配置,也就是MobPush提供的proguard-user.txt檔案,此檔案內容不需要更改,按照提供的即可, 如自己程式碼需要額外增加混淆邏輯,可自行增加混淆規則,如果是Unity2017以下版本,請把註釋的程式碼調換一下即可; (minifyEnabled屬性為是否開啟程式碼混淆:true為開啟混淆,false為關閉)

buildTypes {
        release {
            minifyEnabled true// 是否混淆
            //shrinkResources false// 是否去除無效的資原始檔
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-user.txt' //Unity2017及以上
            //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'  //Unity2017以下
            signingConfig signingConfigs.release
        }

        debug {
            minifyEnabled false
            signingConfig signingConfigs.release
        }
}

4、掛載MobPush.cs指令碼到需要使用的場景上,此時便可以呼叫推送的各個介面;

舊版Unity整合方式注意事項

1、由於Unity2017以下的版本在setting下面並不支援直接生成mainTemplate.gradle和proguard-user.txt,但是可以讀取到mainTemplate.gradle檔案,所以mainTemplate.gradle檔案可以直接使用MobPush提供的;

2、然後混淆檔案需要去Unity的安裝目錄下面的Editor\Data\PlaybackEngines\AndroidPlayer\Tools (Windows)路徑下面,找到UnityProGuardTemplate.txt檔案,這個檔案就是Unity在編譯gardle的時候自動替換的混淆檔案;

3、把MobPush提供的proguard-user.txt檔案裡面的內容複製到UnityProGuardTemplate.txt檔案裡面,就可以了

:UnityProGuardTemplate.txt是在每個用到gradle編譯的Unity專案都會去尋找的混淆檔案,謹慎修改

注意:

整合FCM除了在MobSDK.gradle中配置之外,還需要如下操作:(如果不整合FCM的配置可以跳過此步驟)

1、到官網去下載json,如下所示:https://firebase.google.com/docs/cloud-messaging/?hl=zh-cn

圖片.png

2、登入進入後,跳轉到如下截圖:

圖片.png

https://github.com/MobClub/MobPush-For-Unity

圖片.png

下載後,包裡面如下圖所示,有一個exe的工具,將下載的json放到app資料夾下,點選exe工具生成,會發現生成了一個res資料夾;

圖片.png

3、將生成的res資料夾放到自己的專案中去,如demo中所示:

圖片.png

設定隱私授權回撥

為保證您的App在整合MobSDK之後能夠滿足工信部相關合規要求,您應確保App安裝首次冷啟動且取得使用者閱讀您《隱私政策》授權之後,呼叫Mob提交到的隱私協議回傳函式uploadPrivacyPermissionStatus回傳隱私協議授權結果。 反之,如果使用者不同意您App《隱私政策》授權,則不能呼叫uploadPrivacyPermissionStatus回傳隱私協議授權結果。 詳情參考:合規指南

//隱私授權介面呼叫
mobPush.updatePrivacyPermissionStatus(true);

推送介面

初始化和繫結監聽 public MobPush mobPush;

void Start ()
    {
        mobPush = gameObject.GetComponent();//初始化MobPush
        mobPush.onNotifyCallback = OnNitifyHandler;//訊息回撥監聽
        mobPush.onTagsCallback = OnTagsHandler;//標籤處理回撥監聽
        mobPush.onAliasCallback = OnAliasHandler;//別名處理回撥監聽
        mobPush.onDemoReqCallback = OnDemoReqHandler;//demo請求介面回撥(為了方便測試,提供在客戶端傳送通知的介面,僅供測試時使用)
        mobPush.onRegIdCallback = OnRegIdHandler;//獲取註冊ID非同步監聽回撥介面
    }
        void OnNitifyHandler (int action, Hashtable resulte)
    {
        Debug.Log ("OnNitifyHandler");
        if (action == ResponseState.CoutomMessage)
        {
            Debug.Log ("CoutomMessage:" + MiniJSON.jsonEncode(resulte));
        }
        else if (action == ResponseState.MessageRecvice)
        {
            Debug.Log ("MessageRecvice:" + MiniJSON.jsonEncode(resulte));
        }
        else if (action == ResponseState.MessageOpened) 
        {
            Debug.Log ("MessageOpened:" + MiniJSON.jsonEncode(resulte));
        }
    }

    void OnTagsHandler (int action, string[] tags, int operation, int errorCode)
    {

        Debug.Log ("OnTagsHandler  action:" + action + " tags:" + String.Join (",", tags) + " operation:" + operation + "errorCode:" + errorCode);
    }

    void OnAliasHandler (int action, string alias, int operation, int errorCode)
    {
        Debug.Log ("OnAliasHandler action:" + action + " alias:" + alias + " operation:" + operation + "errorCode:" + errorCode);
    }

    void OnRegIdHandler (string regId)
    {
        Debug.Log ("OnRegIdHandler-regId:" + regId);
    }

    void OnDemoReqHandler (bool isSuccess)
    {
        Debug.Log ("OnDemoReqHandler:" + isSuccess);
    }

其它各種介面說明: 傳送本地通知,自定義本地通知樣式

LocalNotifyStyle style = new LocalNotifyStyle ();
style.setContent ("Text");
style.setTitle ("title");

#if UNITY_ANDROID
    Hashtable extras = new Hashtable ();
    extras["key1"] = "value1";
    extras["key2"] = "value1";
    style.setExtras (extras);
#endif
mobPush.setMobPushLocalNotification (style);

自定義通知欄樣式

CustomNotifyStyle style = new CustomNotifyStyle ();

        #if UNITY_IPHONE

            style.setType(CustomNotifyStyle.AuthorizationType.Badge | CustomNotifyStyle.AuthorizationType.Sound | CustomNotifyStyle.AuthorizationType.Alert);

        #elif UNITY_ANDROID

            style.setContent ("Content");
            style.setTitle ("Title");
            style.setTickerText ("TickerText");

        #endif

            mobPush.setCustomNotification(style);

獲取註冊ID (getRegistrationId)

mobPush.getRegistrationId();

新增標籤 (addTags)

String[] tags = { "tags1", "tags2", "tags3" };
mobPush.addTags(tags);

獲取標籤 (getTags)

mobPush.getTags();

刪除標籤 (deleteTags)

String[] tags = { "tags1", "tags2", "tags3" };
mobPush.deleteTags(tags);

清除全部標籤 (cleanAllTags )

mobPush.cleanAllTags();

新增別名 (addAlias)

mobPush.addAlias("alias");

獲取別名 (getAlias)

mobPush.getAlias();

清除全部別名 (cleanAllAlias)

mobPush.cleanAllAlias();

停止通知服務 (stopPush)

mobPush.stopPush();

重啟通知服務 (restartPush)

mobPush.restartPush();

判斷通知是否被停止,返回值:bool型別(isPushStopped)

mobPush.isPushStopped();

點選通知後是否開啟應用首頁,預設為開啟

mobPush.setClickNotificationToLaunchPage(false);

新增混淆配置

為了防止二次混淆MobPush,需要在專案混淆檔案中新增:

-keep class com.mob.**{*;}

-dontwarn com.mob.**

如果同時集成了華為、小米、魅族等渠道推送,同時也需要在專案中新增防二次混淆配置:

javajava

-keep class com.huawei.**{*;}

-keep class com.meizu.**{*;}

-keep class com.xiaomi.**{*;}

-keep class android.os.SystemProperties