2

push.apns.sendメソッドはコールバックを呼び出しませんsuccess。したがって、正常に実行された場合、この操作がいつ完了したかを判断することはできません。

これが私のコードです(これは、そのデータテーブルの1つの挿入イベントで実行されるサーバー側スクリプトの一部です):

  push.apns.send(message.deviceToken, {
    alert: message.alert,
    badge: message.badge,
    sound: message.sound,
    payload: {
      message: message.alert,
      appID: message.appID
    }
  }, {
    success: function(resp) {
      console.log(resp)
    },
    error: function(err) {
      console.error(err)
    }
  })

errorコールバックは機能します。たとえば、無効を渡すdeviceTokenと、ログにエラーメッセージが表示されます。ただし、正常に実行された場合、ログには何も記録されません。コールバックをまったく呼び出さないようsuccessです。

この例には示されていませんが、私の場合success、レコードのステータスを変更して保存するためにコールバックが必要です。

4

2 に答える 2

5

残念ながら、それがApple Push Notification Service(APNS)の仕組みです。基本的に、内部ではTCP接続がAPNSに開かれ、メッセージに対応するバイト(適切にフォーマットされた)がサービスに送信されます。プッシュが成功した場合、APNSは応答を返しません。そうでない場合は、すぐに応答するか(エラーコールバックが呼び出される場合)、応答しない場合があります。後でフィードバックサービスにアクセスしようとすると、エラーが発生したこと通知される場合があります。

したがって、プッシュが成功したことを発信者に伝える信頼できる方法がpush.apns.sendないことを考えると、チームはコールバックを追加することは意味がないと判断しましたsuccess(プッシュが成功したという誤った印象を与えるでしょう)。

使用する可能性のあるヒューリスティックの1つは、最初にプッシュを送信し、次にsetTimeoutしばらく待つ()ことです。エラーコールバックが呼び出されない場合は、プッシュが成功したと見なします。上記のように100%正確ではないことに注意してください。ただし、シナリオには十分な場合があります。

于 2013-03-26T20:50:08.117 に答える
-2

コードを次のように変更すると、機能します。

success: function(data) {
  console.log(data)
},
于 2013-11-26T11:29:51.293 に答える