文章目录

  • 1.Unity快速接入
    • 1.baseProjectTemplate的设置
    • 2.mainTemplate.gradle 的设置
    • 3.Android/libs 的配置
    • 4.AndroidManifest的配置
      • Activity的设置
      • 自定义PushService(必要)
      • 自定义PushMessageReceiver(必要)
  • 2.官网包的离线推送:
  • 3.各个渠道包的离线推送:
  • 4.集成结果判断

1.Unity快速接入

进入官网,下载最新版本,然后按接入文档接入

1.baseProjectTemplate的设置

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINallprojects {buildscript {repositories {**ARTIFACTORYREPOSITORY**google()jcenter()// hms, 若不集成华为厂商通道,可直接跳过maven { url 'http://developer.huawei.com/repo/'}// fcm, 若不集成 FCM 通道,可直接跳过maven { url "https://maven.google.com" }}dependencies {// If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity// See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html// See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle// To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle versionclasspath 'com.android.tools.build:gradle:4.0.1'// fcm,若不集成 FCM 通道,可直接跳过//classpath 'com.google.gms:google-services:4.3.8'// hms,若不集成华为厂商通道,可直接跳过classpath 'com.huawei.agconnect:agcp:1.6.0.300'**BUILD_SCRIPT_DEPS**}}repositories {**ARTIFACTORYREPOSITORY**google()jcenter()// hms, 若不集成华为厂商通道,可直接跳过maven { url 'http://developer.huawei.com/repo/'}// fcm, 若不集成 FCM 通道,可直接跳过maven { url "https://maven.google.com" }flatDir {dirs "${project(':unityLibrary').projectDir}/libs"}}
}task clean(type: Delete) {delete rootProject.buildDir
}

2.mainTemplate.gradle 的设置

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINapply plugin: 'com.android.library'
//apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.huawei.agconnect'
**APPLY_PLUGINS**dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])//方便控制一些jar包,直接将一些jar包放置到libs目录下即可// 此处以JCore 3.2.2 版本为例。//implementation 'cn.jiguang.sdk:jcore:3.2.2'// 此处以JPush 4.6.2 版本为例//implementation 'cn.jiguang.sdk:jpush:4.6.2'  //若不集成厂商通道,可直接跳过以下依赖// 接入华为厂商//implementation 'com.huawei.hms:push:6.1.0.300'//仅使用 com.huawei.hms:push:6.1.0.XXX 版本需要加 base 依赖,其他版本不需要//implementation 'com.huawei.hms:base:6.2.0.300'// 极光厂商插件版本与接入 JPush 版本保持一致,下同//implementation 'cn.jiguang.sdk.plugin:huawei:4.6.2'// 接入 FCM 厂商//implementation 'com.google.firebase:firebase-messaging:23.0.0'//implementation 'cn.jiguang.sdk.plugin:fcm:4.6.2'// 接入魅族厂商//implementation 'cn.jiguang.sdk.plugin:meizu:4.6.2'// 接入 VIVO 厂商//implementation 'cn.jiguang.sdk.plugin:vivo:4.6.2'// 接入小米厂商//implementation 'cn.jiguang.sdk.plugin:xiaomi:4.6.2'// 接入 OPPO 厂商//implementation 'cn.jiguang.sdk.plugin:oppo:4.6.2'// oppo 厂商 aar 需要单独引入,请将 jpush-android-xxx-release/third-push/oppo/libs 下 com.heytap.msp-push-x.x.x.aar 单独拷贝一份到应用 module/libs 下implementation(name: 'com.heytap.msp-push-3.0.0', ext: 'aar')//以下为 OPPO 3.0.0 aar需要依赖implementation 'com.google.code.gson:gson:2.6.2'implementation 'commons-codec:commons-codec:1.6'implementation 'androidx.annotation:annotation:1.1.0'//AAPT: error: style attribute 'attr/colorPrimary (aka com.szw.jg0412:attr/colorPrimary)' not found.//implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'**DEPS**}android {compileSdkVersion **APIVERSION**buildToolsVersion '**BUILDTOOLS**'compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}defaultConfig {minSdkVersion **MINSDKVERSION**targetSdkVersion **TARGETSDKVERSION**ndk {abiFilters **ABIFILTERS**}versionCode **VERSIONCODE**versionName '**VERSIONNAME**'consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**}lintOptions {abortOnError false}aaptOptions {noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ')ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"}**PACKAGING_OPTIONS**
}**REPOSITORIES**
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**

3.Android/libs 的配置

直接拷贝极光的libs和src到unity的Android目录

4.AndroidManifest的配置

Activity的设置

      <activity android:name="com.longtugame.rjsdk.MainActivity"android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"android:allowEmbedded="@string/app_name"android:exported = "true"android:theme="@android:style/Theme.NoTitleBar"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity"android:value="true" /></activity>

自定义PushService(必要)

unity中的配置

      <serviceandroid:name=".PushService"android:exported="true"android:enabled="true"><intent-filter><action android:name="cn.jiguang.user.service.action" /></intent-filter></service>

Android 直接定义即可

自定义PushMessageReceiver(必要)

unity 配置:

       <receiver android:name=".PushMessageReceiver"android:exported="true"android:enabled="true"><intent-filter><action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /><category android:name="${applicationId}"></category></intent-filter></receiver>

android 侧参考:

package cn.kkvideos;import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;import cn.jpush.android.api.CmdMessage;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;public class PushMessageReceiver extends JPushMessageReceiver {private static final String TAG = "PushMessageReceiver";@Overridepublic void onMessage(Context context, CustomMessage customMessage) {Log.e(TAG, "[onMessage] " + customMessage);Intent intent = new Intent("com.jiguang.demo.message");intent.putExtra("msg", customMessage.message);context.sendBroadcast(intent);}@Overridepublic void onNotifyMessageOpened(Context context, NotificationMessage message) {Log.e(TAG, "[onNotifyMessageOpened] " + message);try{//打开自定义的ActivityIntent i = new Intent(context, TestActivity.class);Bundle bundle = new Bundle();bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle);bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent);i.putExtras(bundle);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );context.startActivity(i);}catch (Throwable throwable){}}@Overridepublic void onMultiActionClicked(Context context, Intent intent) {Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮");String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA);//开发者根据不同 Action 携带的 extra 字段来分配不同的动作。if (nActionExtra == null) {Log.d(TAG, "ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null");return;}if (nActionExtra.equals("my_extra1")) {Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一");} else if (nActionExtra.equals("my_extra2")) {Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二");} else if (nActionExtra.equals("my_extra3")) {Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三");} else {Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义");}}//消息到达消息信息@Overridepublic void onNotifyMessageArrived(Context context, NotificationMessage message) {Log.e(TAG, "[onNotifyMessageArrived] " + message);}@Overridepublic void onNotifyMessageDismiss(Context context, NotificationMessage message) {Log.e(TAG, "[onNotifyMessageDismiss] " + message);}@Overridepublic void onRegister(Context context, String registrationId) {Log.e(TAG, "[onRegister] " + registrationId);Intent intent = new Intent("com.jiguang.demo.register");context.sendBroadcast(intent);}@Overridepublic void onConnected(Context context, boolean isConnected) {Log.e(TAG, "[onConnected] " + isConnected);}@Overridepublic void onCommandResult(Context context, CmdMessage cmdMessage) {Log.e(TAG, "[onCommandResult] " + cmdMessage);}@Overridepublic void onTagOperatorResult(Context context, JPushMessage jPushMessage) {//TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage);super.onTagOperatorResult(context, jPushMessage);}@Overridepublic void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {//TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage);super.onCheckTagOperatorResult(context, jPushMessage);}@Overridepublic void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {//TagAliasOperatorHelper.getInstance().onAliasOperatorResult(context,jPushMessage);super.onAliasOperatorResult(context, jPushMessage);}@Overridepublic void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {//TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage);super.onMobileNumberOperatorResult(context, jPushMessage);}@Overridepublic void onNotificationSettingsCheck(Context context, boolean isOn, int source) {super.onNotificationSettingsCheck(context, isOn, source);Log.e(TAG, "[onNotificationSettingsCheck] isOn:" + isOn + ",source:" + source);}}

2.官网包的离线推送:

官网包需要有各个渠道推送相关的jar包,要不离线推送不好使
小米后台有多渠道的配置,直接将官网包的包名配置上即可
华为渠道,需要在华为后台创建官网渠道包包名的应用
华为官网下载的类库不全,推介grade下载到本地,提供个脚本

apply plugin: 'java'def dest = "test"repositories { maven {url 'http://developer.huawei.com/repo/'}}  dependencies { compile 'com.huawei.hms:base:6.2.0.300'compile 'com.huawei.hms:push:6.1.0.300'
} task downloadJars(type: Copy) {println destfrom configurations.runtimeinto 'libs'}//gradle downloadJars

3.各个渠道包的离线推送:

## OPPO:
1.OPPO手机安装时默认通知权限关闭,测试时注意先打开通知权限,不然无法收到。
2.点击通知打不开应用(android11)(Intent方式),已反馈感觉他们无心解决的样子## 华为:1.外网开发接入还好,内网开发,需要搭marven仓库做中转
2.华为appid定义,其它参数同理按需添加<meta-dataandroid:name="com.huawei.hms.client.appid"android:value="testid" />3.agconnect-services.json unity读取(实际测试不需要)
参考网址:
https://github.com/Unity-Technologies/HMSSDKSample
脚本位置:Assets/HuaweiHms/src/Editor/AfterBuildToDo.csusing System;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using UnityEditor.Callbacks;
using UnityEditor.Android;public class AfterBuildToDO : IPostGenerateGradleAndroidProject
{public int callbackOrder{get { return 0; }}private bool compareVersion(string version1, string version2){string[] version1List = version1.Split('.');string[] version2List = version2.Split('.');int v1year = Int32.Parse(version1List[0]);int v2year = Int32.Parse(version2List[0]);if (v1year != v2year){return v1year > v2year;}int v1sub = Int32.Parse(version1List[1]);int v2sub = Int32.Parse(version2List[1]);return v1sub > v2sub;}private string getOutputPath(string path){if (compareVersion("2019.3", Application.unityVersion)){return path;}DirectoryInfo parent = new DirectoryInfo(path).Parent;return Path.Combine(parent.FullName, "launcher");}public void CopyResource(string path){string sourceDir = Application.dataPath + "/HuaweiService/Android/res/xml/";if (!Directory.Exists(sourceDir)){return;}var fileList = Directory.GetFiles(sourceDir, "*.xml");if (fileList.Length <= 0){return;}string targetDir = path + "/src/main/res/xml/";if (!Directory.Exists(targetDir)){Directory.CreateDirectory(targetDir);}foreach (var file in fileList){string fileName = Path.GetFileName(file);File.Copy(Path.Combine(sourceDir, fileName), Path.Combine(targetDir, fileName), true);}}public void OnPostGenerateGradleAndroidProject(string path){Debug.Log(path);string launcherPath = getOutputPath(path);Debug.Log(launcherPath);//读取源文件路径string sourcePath = Application.dataPath + "/Plugins/Android/agconnect-services.json";//拷贝文件(源路径及文件名, 拷贝路径及文件名, 若该文件名已存在,是否替换)File.Copy(sourcePath, launcherPath + "/agconnect-services.json", true);CopyResource(path);AddAuthFile(sourcePath, path);}public void AddAuthFile(string sourcePath,string path){File.Copy(sourcePath,path+ "/agconnect-services.json", true);AddWxEntryActivityToAndroid(path);AddxmltoAndroid(path);}private void AddxmltoAndroid(string path){var basePath = path + "/src/main/res/values";if (!Directory.Exists(basePath)){Directory.CreateDirectory(basePath);}var codePath = basePath + "/strings.xml";if (!Directory.Exists(basePath)){Directory.CreateDirectory(basePath);}string sourceFilePath = Application.dataPath + "/HuaweiService/Android/res/Auth/strings.txt";if (File.Exists(sourceFilePath)){if (File.Exists(codePath)){string stringsFile = File.ReadAllText(codePath);string appendContent =  File.ReadAllText(sourceFilePath);stringsFile = stringsFile.Replace("</resources>", appendContent);File.WriteAllText(codePath, stringsFile);}else{string appendContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+"\r\n"+"<resources>"+"\r\n" +File.ReadAllText(sourceFilePath);File.WriteAllText(codePath, appendContent);}}}private void AddWxEntryActivityToAndroid(string proejectPath){var basePath = GetPackagePath(proejectPath, Application.identifier) + "/wxapi";if (!Directory.Exists(basePath)){Directory.CreateDirectory(basePath);}var codePath = basePath + "/WXEntryActivity.java";if (File.Exists(codePath)) // do not overwrite what has been done by developer{    return;}var code = Resources.Load<TextAsset>("WXEntryActivity");if (code != null){var generatedCode = code.text.Replace("com.unity.EndlessRunnerSampleGame.TkeDemo", Application.identifier);var writer = new StreamWriter(codePath, false);writer.Write(generatedCode);writer.Close();}}private string GetPackagePath(string basePath, string package){var pathBuilder = new StringBuilder(basePath);pathBuilder.Append(Path.DirectorySeparatorChar).Append("src");pathBuilder.Append(Path.DirectorySeparatorChar).Append("main");pathBuilder.Append(Path.DirectorySeparatorChar).Append("java");var codePath = package.Split('.');foreach (var p in codePath){pathBuilder.Append(Path.DirectorySeparatorChar).Append(p);}return pathBuilder.ToString();}
}## VIVO1.未正式上架的需要添加测试设备
2.需要服务器配合发送推送测试消息,具体见极光官方文档

4.集成结果判断

极光集成结果

Unity接入极光经验分享相关推荐

  1. Unity内存优化经验分享

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  2. Unity MMORPG游戏优化经验分享

    今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORPG游戏进行优化. 在优化Unity游戏时,我们一般从四个方面:CPU.GPU.内存.工程配置等入手, ...

  3. unity许可证不可用_不可思议之梦蝶从PC版移植到Nintendo Switch经验分享(上)

    本文将分享队友游戏制作人李喆Unite 2019上的技术演讲-<不可思议之梦蝶>从PC版移植到Nintendo Switch经验分享. 受篇幅限制,本次演讲将分享二篇内容.本文将分享:需要 ...

  4. 使用Unity开发手机AR项目经验分享

    1.概述 出于公司自研开发了一款AR手机app简单记录下开发经验.如果有同行朋友有更好的经验欢迎交流哈. 2.使用ARFoundation开发 Unity开发手机AR项目主要是集成的ARCore和AR ...

  5. android红米3调用相机,手机拍照经验分享:用Redmi K30拍极光!

    手机拍照经验分享:用Redmi K30拍极光! 2019-12-19 16:51:29 2点赞 1收藏 1评论 样的一部手机,到底可以拍出怎样的照片,在不同人的手中有着不同的表现.比如大部分普通人,只 ...

  6. 惠惠软件|经验分享:路由器如何设置对接入无线设备的控制

    惠惠软件|经验分享:路由器如何设置对接入无线设备的控制 我们以路由器TL-WDR5640为例来说明: 1.进入应用管理,选择无线设备接入控制: 2.在允许接入设备列表中选择删除无线设备: 3.保存,重 ...

  7. unity 接入shareSDK进行微信分享(记录)

    unity 接入shareSDK进行微信分享(记录) unity利用shareSDK进行微博分享(记录) 对这两天进行的关于shareSDK的一些知识进行记录 下载shareSDK 在shareSDK ...

  8. 汇付聚合支付自助接入的一点经验分享

    近日,看到有些朋友在提问如何对接聚合支付,本人近期刚好对接过一家三方支付,有一点经验心得,算是供大家参考吧,不喜勿喷. 本人对接的聚合支付是一家三方支付的聚合支付解决方案,叫汇付天下聚合支付自助接入解 ...

  9. Unity 接入Facebook

    最近由于项目需要,接入Fackbook.原先的已经有登录模块了,不过是shaderSDK的,考虑到国内这些插件会对数据动手脚,只有换掉了. 回到正题,接入的过程还是遇到不少问题,先整理下我的资料,以下 ...

最新文章

  1. 参会指南 |「MEET 2021智能未来大会」明天启幕!
  2. 王宏计算机系,王宏健(副教授)
  3. mysql-5.6.16-win32_mysql-5.6.16-win32免安装配置方法
  4. cocos2d-x 日志...
  5. 文献学习(part83)--An Embedding Approach to Anomaly Detection
  6. sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍
  7. Jmeter中使用循环如何保证数据不重复
  8. IDEA插件系列(45):UUID Generator插件——UUID生成器
  9. Matlab S函数求解二阶微分方程或二阶动态方程
  10. 通过AWS了解云计算系列——云计算的核心技术体系
  11. Android根据输入法的状态隐藏和关闭输入法
  12. 对于大学工作规划和面试前准备
  13. uni--ReferenceError plus is not defined
  14. SQL基本语句学习(上)
  15. Cisco Cpos STM 配置示例
  16. lammps案例:聚乙烯/石墨烯侧面pull out模拟案例
  17. K8s安装遇见问题笔记
  18. 欧姆龙PLC CP1E如何实现远程上下载和编程调试?
  19. MFC使用ADO连接SQL SERVER数据库实现的高校教材管理系统
  20. Python 音频库 及具体使用介绍(包括声卡通道获取及选择) 第一篇: sounddevice

热门文章

  1. 网站 、平面的配色方案之二
  2. Android SmartTabLayout worm蠕虫蠕动/普通平整动画切换动画属性
  3. 利用 Windows Vista 和 WCF 中强大的 P2P 通信功能 [转]
  4. 如何设置使用阿里云远程仓库
  5. WEB自动化-获取tbody下面tr的个数
  6. 信息检索与分析 - 课程总结
  7. 【Android】新闻资讯APP的简易实现
  8. 职业规划——我是如何在第一份工作中就能做到部门副经理的?
  9. linux var是什么文件夹,linux中/etc与/var目录,各是什么意思?这两个目录下的文件有什么特点?...
  10. linux文件中 bin的全称是什么,LINUX根目录下的bin boot dev etc 这几个目录的作用是什么?...