【问题标题】:Unity3d FirebaseApp initialization unsuccessfulUnity3d FirebaseApp初始化不成功
【发布时间】: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/…

标签: android unity3d firebase


【解决方案1】:

您无需创建额外插件即可使用 Firebase 推送通知。但是流程有点棘手。以下是快速步骤:

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

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

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

  4. 从 Android Studio 构建项目。

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 2016-09-16
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多