2011-01-09 7 views
0

Ich entwickle eine iPhone App, die Apple Push Notifications verwendet. Auf der iPhone-Seite ist alles in Ordnung, auf der Serverseite habe ich ein Problem. Benachrichtigungen werden korrekt gesendet. Wenn ich jedoch versuche, den Feedback-Dienst abzufragen, um eine Liste der Geräte zu erhalten, von denen die App deinstalliert wurde, erhalte ich immer null Ergebnisse. Ich weiß, dass ich ein Ergebnis erhalten sollte, da die App von einem meiner Testgeräte deinstalliert wurde. Nach 24 Stunden und mehr habe ich noch keine Ergebnisse vom Feedback-Service.Apple Push Benachrichtigung Feedback Service funktioniert nicht

Irgendwelche Ideen? Weiß jemand, wie lange es dauert, bis der Feedbackdienst erkennt, dass meine App von meinem Testgerät deinstalliert wurde?

Hinweis: Ich habe eine andere Push-Benachrichtigung Anwendungen auf dem Gerät, so dass ich weiß, dass meine App nicht die einzige App ist.

Die Code - 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; 
    } 

Antwort

0

In einer Minute nach der Deinstallation werden Sie das Feedback erhalten.

1

Haben Sie versucht, eine Push-Benachrichtigung an die deinstallierte Anwendung zu senden? Aus meiner Sicht sendet der Feedback-Service nur Benachrichtigungen über die fehlgeschlagene Zustellung von Push-Benachrichtigungen.

Verwandte Themen