Unity3d FirebaseApp初始化失败

时间:2016-10-21 12:05:03

标签: android unity3d firebase

我尝试将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

此时一切似乎都很完美,并且在构建过程中没有错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以在不创建其他插件的情况下使用Firebase推送通知。但这个流程有点棘手。以下是快速步骤:

  1. 在Unity编辑器中。在Build Settings中选择Google Android 项目标志和导出项目。确保您的捆绑包ID 对应于Firebase控制台上的软件包ID。

  2. 在Android Studio中。导入Unity项目。重要提示:不要     打开,导入!

  3. 设置.gradle脚本并按照here所述添加google-services.json文件。

  4. 从Android Studio构建项目。