Firebase云消息推送官方文档,自备梯子。
Unity接入Firebase云消息推送,有两种不同的情况。
- easy模式,按照官方教材导入FirebaseMessaging.unitypackage,打包没报Too many field references: 70613; max is 65536这样的报错。恭喜你基本可以直接打包成功。
- hard模式,打包报错Too many field references: 70613; max is 65536。如果你的unity版本是5.5之前,请先把unity升级到5.5或者更新。然后看下面的步骤。
一、在unity中启用multidex。
1、打开目录[UnityInstallationDirecory]\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates, 拷贝 mainTemplate.gradle文件到[ProjectName]\Assets\Plugins\Android目录。
2、 打开目录 [UnityInstallationDirecory]\Editor\Data\PlaybackEngines\AndroidPlayer\Apk, 拷贝AndroidManifest.xml文件到[ProjectName]\Assets\Plugins\Android目录。如果该目录已有AndroidManifest.xml文件,重命名为AndroidManifest1.xml。
3、 修改mainTemplate.gradle为:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
flatDir {
dirs 'libs'
}
}
}
apply plugin: 'com.android.application'
dependencies {
compile 'com.android.support:multidex:1.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}
android {
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'
defaultConfig {
multiDexEnabled true
targetSdkVersion **TARGETSDKVERSION**
applicationId '**APPLICATIONID**'
}
lintOptions {
abortOnError false
}
**SIGN**
buildTypes {
debug {
jniDebuggable true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'
**SIGNCONFIG**
}
}
dexOptions {
javaMaxHeapSize "4g"
}
}
4、 修改AndroidManifest.xml为:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:name="android.support.multidex.MultiDexApplication">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<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>
</application>
</manifest>
5、将所有AndroidManifest的[android:debuggable=”true”]项移除。
二、使用Gradle Build方式接入helpshift。
如果你的游戏中接入了helpshift,请下载最新版本的helpshift,并参照这里重新接入。
三、更新工程内的依赖包到匹配Firebase版本。
FirebaseMessaging.unitypackage集成了unity-jar-resolver插件,会根据Assets\Firebase\Editor\AppDependencies.xml和Assets\Firebase\Editor\MessagingDependencies.xml文件自动下载Firebase要用的依赖包。但是别的sdk(例如helpshift、facebook和adjust等)的依赖包没法自动更新到对应版本,所以要添加OtherDependencies.xml文件到任意editor目录,里面配置需要更新的依赖包。例如我的OtherDependencies.xml:
<dependencies>
<androidPackages>
<androidPackage spec="com.android.support:appcompat-v7:26.1.0">
</androidPackage>
<androidPackage spec="com.android.support:cardview-v7:26.1.0">
</androidPackage>
<androidPackage spec="com.android.support:design:26.1.0">
</androidPackage>
<androidPackage spec="com.android.support:recyclerview-v7:26.1.0">
</androidPackage>
<androidPackage spec="com.android.support:support-vector-drawable:26.1.0">
</androidPackage>
<androidPackage spec="com.android.support:transition:26.1.0">
</androidPackage>
</androidPackages>
</dependencies>
四、Gradle Build
1、设置签名
2、使用gradle工具打包
至此大功告成。