2011-01-09 83 views
0

我正在開發使用Apple推送通知的iPhone應用程序。在iPhone端一切都很好,在服務器端我有一個問題。但是,當我嘗試查詢反饋服務以獲取卸載應用程序的設備列表時,會發送正確的通知,但我總是得到零結果。我知道我應該從我的一個測試設備卸載應用程序時獲得一個結果。 24小時後,我仍然沒有反饋服務的結果..蘋果推送通知反饋服務不起作用

任何想法?是否有人知道反饋服務需要多長時間才能認出我的應用程序已從我的測試設備上卸載?

注:我在設備上有另一個推送通知應用程序,所以我知道我的應用程序不是唯一的應用程序。

代碼 - C#:卸載後

public static string CheckFeedbackService(string certaName, string hostName) 
    { 
     SYLogger.Log("Check Feedback Service Started"); 
     ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 
     // Create a TCP socket connection to the Apple server on port 2196 
     TcpClient tcpClientF = null; 
     SslStream sslStreamF = null; 
     string result = string.Empty; 
     //Contect to APNS& Add the Apple cert to our collection 
     X509Certificate2Collection certs = new X509Certificate2Collection { GetServerCert(certaName) }; 
     //Set up 
     byte[] buffer = new byte[38]; 
     int recd = 0; 
     DateTime minTimestamp = DateTime.Now.AddYears(-1); 
     // Create a TCP socket connection to the Apple server on port 2196 
     try 
     { 
      using (tcpClientF = new TcpClient(hostName, 2196)) 
      { 
       SYLogger.Log("Client Connected ::" + tcpClientF.Connected); 
       // Create a new SSL stream over the connection 
       sslStreamF = new SslStream(tcpClientF.GetStream(), true,ValidateServerCertificate); 
       // Authenticate using the Apple cert 
       sslStreamF.AuthenticateAsClient(hostName, certs, SslProtocols.Default, false); 
       SYLogger.Log("Stream Readable ::" + sslStreamF.CanRead); 
       SYLogger.Log("Host Name ::"+hostName); 
       SYLogger.Log("Cert Name ::" + certs[0].FriendlyName); 

       if (sslStreamF != null) 
       { 
        SYLogger.Log("Connection Started"); 

          //Get the first feedback 
          recd = sslStreamF.Read(buffer, 0, buffer.Length); 
          SYLogger.Log("Buffer length ::" + recd); 
          //Continue while we have results and are not disposing 
          while (recd > 0) 
          { 

             SYLogger.Log("Reading Started"); 
              //Get our seconds since 1970 ? 
              byte[] bSeconds = new byte[4]; 
              byte[] bDeviceToken = new byte[32]; 
              Array.Copy(buffer, 0, bSeconds, 0, 4); 
              //Check endianness 
              if (BitConverter.IsLittleEndian) 
                Array.Reverse(bSeconds); 
              int tSeconds = BitConverter.ToInt32(bSeconds, 0); 
              //Add seconds since 1970 to that date, in UTC and then get it locally 
              var Timestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(tSeconds).ToLocalTime(); 
              //Now copy out the device token 
              Array.Copy(buffer, 6, bDeviceToken, 0, 32); 
              string deviceToken = BitConverter.ToString(bDeviceToken).Replace("-", "").ToLower().Trim(); 
              //Make sure we have a good feedback tuple 
              if (deviceToken.Length == 64 && Timestamp > minTimestamp) 
              { 
               SYLogger.Log("Feedback " + deviceToken); 
               result = deviceToken; 
              } 
              //Clear array to reuse it 
              Array.Clear(buffer, 0, buffer.Length); 
              //Read the next feedback 
              recd = sslStreamF.Read(buffer, 0, buffer.Length); 
          } 
       SYLogger.Log("Reading Ended"); 
       } 

      } 

     } 
     catch (Exception e) 
     { 
      SYLogger.Log("Authentication failed - closing the connection::" + e); 
      return "NOAUTH"; 
     } 
     finally 
     { 
      // The client stream will be closed with the sslStream 
      // because we specified this behavior when creating the sslStream. 
      if (sslStreamF != null) sslStreamF.Close(); 
      if (tcpClientF != null) tcpClientF.Close(); 
      //Clear array on error 
      Array.Clear(buffer, 0, buffer.Length); 
     } 
     SYLogger.Log("Feedback ended "); 
     return result; 
    } 

回答

0

在一分鐘後,你會收到反饋。

1

您是否嘗試向已卸載的應用程序發送推送通知?根據我的理解,反饋服務只發送失敗的推送通知傳送通知。