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

この原因を発見。Play! ファイルをクラスパスに追加しますが、FileInputStream実際にはクラスパス上のパスを直接参照しません。代わりに、ファイル システム上のパスを使用します。

この以前の StackOverflow は、 getResourceAsStream と FileInputStreamの基本について説明します: getResourceAsStream() と FileInputStream

元の問題に戻ります... APNS のソース コードを確認することが役に立ちました。Play FileInputStream! クラスパスに追加するだけで、使用するにはソースを変更する必要がありますClassLoader.class.getResourceAsStream(fileName)

これは、他のオープンソース ライブラリにも当てはまると思います。

では、なぜオブジェクトはクラッシュしたのでしょうか? 少しエラーをキャッチしなければ、正しく初期化されなかったからです。

于 2012-09-27T16:40:04.363 に答える