0

notnoop 使用了很棒的 Java APNS。https://github.com/notnoop/java-apns

出于某种原因,当我想拉入我的密钥库时,容纳 APNS 的整个对象就会爆炸。下面是:

object Notification {
 val iosApnsDist = 
        APNS.newService()
        .withCert("/ipush.dist.p12", "password")
        .withSandboxDestination()
        .build()
}

对于熟悉 Play! 的人来说,添加到conf文件夹中的文件应该在类路径中可用。所以我有点困惑,为什么我的引用会使应用程序崩溃。

下面是提取密钥库的 APNS java 源代码片段。有什么想法吗?

public ApnsServiceBuilder withCert(String fileName, String password)
    throws RuntimeIOException, InvalidSSLConfig {
        FileInputStream stream = null;
        try {
            stream = new FileInputStream(fileName);
            return withCert(stream, password);
        } catch (FileNotFoundException e) {
            throw new RuntimeIOException(e);
        } finally {
            Utilities.close(stream);
        }
    }

更新

在启动期间运行 try/catch 时,我能够提取错误消息。基本上,它找不到文件:

Caused by: com.notnoop.exceptions.RuntimeIOException: java.io.FileNotFoundException: \ipush.dev.p12 (The system cannot find the file specified)
        at com.notnoop.apns.ApnsServiceBuilder.withCert(ApnsServiceBuilder.java:116)
        at engine.logic.notification.Notification$.<init>(Notification.scala:61)

我可以确认该文件确实在 /conf 文件夹中,那是什么原因?

4

1 回答 1

0

找到了这个的原因。请注意播放!将文件添加到类路径,但FileInputStream实际上并不直接引用类路径上的路径。相反,它使用文件系统上的路径。

以前的 StackOverflow 将提供有关getResourceAsStream 与 FileInputStream的基础知识:getResourceAsStream() 与 FileInputStream

所以回到最初的问题......它有助于查看 APNS 的源代码。请注意,它使用FileInputStream但自 Play!仅将其添加到类路径中,然后需要修改源才能使用ClassLoader.class.getResourceAsStream(fileName).

我怀疑这也适用于其他开源库。

那么为什么物体会崩溃呢?因为如果没有一点错误捕获,它永远不会正确初始化。

于 2012-09-27T16:40:04.363 回答