我刚刚尝试在我的项目中导入Firebase amdin sdk。
我在android studio中收到以下消息。
E / AndroidRuntime:致命异常:主要
进程:com.lupin.ganzp.ticketfireauthmanager,PID:7883
java.lang.RuntimeException:无法启动活动ComponentInfo {com.lupin.ganzp.ticketfireauthmanager / com.lupin.ganzp.ticketfireauthmanager.MainActivity}:java.io.FileNotFoundException:/ServiceAccountKey.json(无此类文件或目录)
这可能是简单的代码
const val relativePath = "/ServiceAccountKey.json"
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
SDK_Init()
Access_DB("newDB")
}
fun SDK_Init()
{
var serviceAccount = FileInputStream(relativePath)
val options = FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://<HiDE>.firebaseio.com/")
.build()
FirebaseApp.initializeApp(options)
}
}
我已经做了几乎可以做的事情...
我那样尝试
但是,此代码无法找到我的json文件,尽管您在此图片中确实存在该文件。
下面的代码显示创建的文件不存在。
val name = File(".").canonicalPath
println("Test $name")
val file = File(name, "/" + "ServiceAccountKey.json")
println("file path : " + file)
println(file.exists())
println(file.exists()) //false
println(file.canRead()) //false
谁知道解决这个问题的方法?
答案 0 :(得分:1)
这是一个Android项目,而不是Java项目-因此,文件的位置应为res/raw
或assets
(这两个都是目录,将被复制而不是进行处理)。 。否则该文件将永远不会进入内置软件包,从而导致错误15
。
请注意,将一个名为ServiceAccountKey.json
的文件放入正在1:1复制的目录中可能是值得考虑的……因为可以从那里容易地提取该密钥。
这与google-services.json
的行为方式大不相同,因为该文件不必将其放入内置包中,因为它是由插件处理的,然后添加到字符串资源中。
答案 1 :(得分:0)
有一种方法可以在Java项目中初始化Admin SDK:
FileInputStream serviceAccount = new FileInputStream("project-credentials.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://mydatabase.firebaseio.com/")
.build();
我将JSON文件保存在与应用程序的工作目录相同的目录中。