6

私はJava-APNSフレームワークを使用してiOSデバイスにプッシュ通知を送信しています。それは非常にうまく機能し(開発者のおかげです!)、すべてが正しく設定されているときにデバイスに送信することができます。ただし、失敗した場合は適切に処理したいと思います。特定の場合に受信する必要のある、文書化されたAPNSエラーコードがいくつかあります。

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

いくつかの失敗ケースをどのように作成しますか?ApnsDelegateを実装し、デリゲートを使用してApnsServiceオブジェクトを構築する独自のクラスがあります。プッシュの呼び出しで無効なトークンとペイロードの空の文字列を渡そうとしました:

service.push("ab", "")

しかし、ApnsDelegateのmessageSentメソッドは引き続き呼び出されます。代わりにmessageSendFailedメソッドで終わるか、connectionClosedで終わると思いますが、どちらも呼び出されません。誰かがこのようなものをテストして動作させましたか?これが私のクラスの例です...私は実際にScalaでこれを行っていますが、Javaを投稿した方が幸運だと思いました。呼び出されると、「メッセージがABに送信されました」と出力されます。

public class ApnsSender implements ApnsDelegate {

    public void send(Notification Notification) {
        ApnsService service = getApnsService();

        String payload = getPayload(notification);

        service.push("ab", "");
    }

    private ApnsService getApnsService() { ... }

    private String getPayload(Notification notification) { ... }

    public void messageSent(ApnsNotification message) {
        String token = Utilities.toHexString(message.getDeviceToken());
        System.out.println("Message sent to " + token);
    }

    public void messageSendFailed(ApnsNotification message, Throwable e) {
        System.out.println("Message failed");
    }

    public void messageSent(DeliveryError e, Int messageIdentifier) {
        System.out.println("Message closed with error code " + e.code());
    }

}
4

1 に答える 1

5

コメントで述べたように、私は代替手段としてJavaPNSを検討しましたが、これは使用するのにはるかに優れたフレームワークです。また、現在作業中です(投稿時点で2日前の最後のコミット)が、2011年12月以降java-apnsは更新されていません。

iOSデバイスにプッシュ通知を送信しようとする人には、java-apnsの使用をJavaPNSの使用に置き換えることをお勧めします。受信したエラーパケットに反応し、アクセスしやすい方法で結果を発信者に渡します。

于 2012-09-11T03:58:54.633 に答える