我尝试将Firebase集成到Unity3d上以接收推送通知。
应用程序启动时出现以下错误:
I/dalvikvm( 7881): Could not find method android.content.Context.isDeviceProtectedStorage, referenced from method com.google.firebase.FirebaseApp.zza
I/FirebaseInitProvider( 7881): FirebaseApp initialization unsuccessful
firebase-messaging示例与我的google-services.json一起运行正常。所以我认为控制台配置是正确的。
1。我在Android Studio上创建了一个库项目。
我关注了一个网站,从Android Studio和官方文档构建了一个.jar来添加firebase。
http://www.thegamecontriver.com/2015/04/android-plugin-unity-android-studio.html
项目gradle文件:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app gradle文件:
apply plugin: 'com.android.library'
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
sourceSets {
main {
java {
srcDir 'src/main/java'
}
}
}
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-messaging:9.6.1'
compile files('libs/classes.jar')
}
task deleteOldJar(type: Delete) {
delete 'release/NotificationPlugin.jar'
}
task exportJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
rename('classes.jar', 'NotificationPlugin.jar')
}
exportJar.dependsOn(deleteOldJar, build)
apply plugin: 'com.google.gms.google-services'
此时成功生成.jar。
2。我在Unity中创建了一个JarResolver依赖项。
我使用PlayServicesResolver v1.1找到其他google unity包(例如谷歌分析,其他插件升级)
https://github.com/googleanalytics/google-analytics-plugin-for-unity
FirebaseDependencies.cs
using Google.JarResolver;
using UnityEditor;
[InitializeOnLoad]
public static class FirebaseDependencies
{
private static readonly string PluginName = "Firebase";
static FirebaseDependencies()
{
PlayServicesSupport svcSupport = PlayServicesSupport.CreateInstance(
PluginName,
EditorPrefs.GetString("AndroidSdkRoot"),
"ProjectSettings");
svcSupport.DependOn("com.google.firebase",
"firebase-core",
PluginVersion.PlayServicesVersionConstraint);
svcSupport.DependOn("com.google.firebase",
"firebase-messaging",
PluginVersion.PlayServicesVersionConstraint);
}
}
PluginVersion.cs
public class PluginVersion
{
public const string PlayServicesVersionConstraint = "9.6+";
}
在ResolveClientJars命令之后,所有依赖项都将复制到Plugins / Android文件夹中。
AndroidManifest.xml
firebase-analytics-9.6.1
firebase-analytics-impl-9.6.1
firebase-common-9.6.1
firebase-core-9.6.1
firebase-iid-9.6.1
firebase-messaging-9.6.1
google-services.json
play-services-basement-9.6.1
play-services-tasks-9.6.1
support-annotations-24.0.0.jar
support-v4-24.0.0
此时一切似乎都很完美,并且在构建过程中没有错误。
我做错了什么?
答案 0 :(得分:0)
您可以在不创建其他插件的情况下使用Firebase推送通知。但这个流程有点棘手。以下是快速步骤:
在Unity编辑器中。在Build Settings中选择Google Android 项目标志和导出项目。确保您的捆绑包ID 对应于Firebase控制台上的软件包ID。
在Android Studio中。导入Unity项目。重要提示:不要 打开,导入!
设置.gradle脚本并按照here所述添加google-services.json文件。
从Android Studio构建项目。