【发布时间】:2017-03-03 17:48:28
【问题描述】:
我正在尝试在 Unity3d 上集成 Firebase 以接收推送通知。
应用启动时出现以下错误:
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
}
应用 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(例如谷歌分析,其他插件升级它)
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);
}
}
插件版本.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
此时一切似乎都运行良好,并且在构建过程中没有错误。
我做错了什么?
【问题讨论】:
-
您是否尝试将 google-services.json 移动到流资产文件夹中?问题可能是它找不到该文件
-
在 android studio 中使用 firebase 时,您必须确保该文件位于 app 模块的根目录中,因此统一导出时它可能不在正确的位置
-
其他一切对我来说都是正确的
-
我将 google-services.json 移到 StreamingAssets 文件夹中,但我遇到了同样的错误
-
我关注了这个线程并且它有效! stackoverflow.com/questions/37497363/…