MobPush Android For Unity
整合準備
註冊賬號
使用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整合方式(建議)
關鍵檔案:
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
2、登入進入後,跳轉到如下截圖:
https://github.com/MobClub/MobPush-For-Unity
下載後,包裡面如下圖所示,有一個exe的工具,將下載的json放到app資料夾下,點選exe工具生成,會發現生成了一個res資料夾;
3、將生成的res資料夾放到自己的專案中去,如demo中所示:
設定隱私授權回撥
為保證您的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