Einzelnen Beitrag anzeigen

NickD

Registriert seit: 10. Okt 2012
Ort: Burgsinn
53 Beiträge
 
Delphi 10.3 Rio
 
#1

iOS PushNotifications über TIdTCPClient

  Alt 20. Okt 2016, 08:52
Hallo zusammen,
ich versuche gerade über eine Delphi-Windows-Anwendung eine PushNotification an eine App zu senden. Dies funktioniert auch, solange keine Sonderzeichen, Umlaute, etc.. verwendet werden.
Ich habe dann bei Apple nachgelesen, das ein UTF8 String erwartet wird. Aber egal was ich versuche, die Nachricht kommt nicht an bzw. wird von Apple verworfen.

Hier mein Code um die Notification zu senden, die auskommentierten Stellen sind Versuche die ich unternommen habe, um die Nachricht im UTF-8 Format zu senden:

Delphi-Quellcode:
 
    TCPClient := TIdTCPClient.Create;
    IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create();
    try
      TCPClient.Host := 'gateway.sandbox.push.apple.com';
      TCPClient.Port := 2195;
      TCPClient.IPVersion := TIdIPVersion.Id_IPv4;

      IdSSLIOHandlerSocketOpenSSL1.Host := 'gateway.sandbox.push.apple.com';
      IdSSLIOHandlerSocketOpenSSL1.Port := 2195;
      IdSSLIOHandlerSocketOpenSSL1.Destination := 'gateway.sandbox.push.apple.com:2195';
      IdSSLIOHandlerSocketOpenSSL1.MaxLineAction := maException;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile := '****.pem';
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile := '****.pem';
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmClient;
      IdSSLIOHandlerSocketOpenSSL1.DefStringEncoding := TIdTextEncoding.UTF8;

      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv3, sslvTLSv1];

      TCPClient.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
      try
        if not TCPClient.Connected then
          TCPClient.Connect;

        strMsg := GetMessageIos(ADeviceToken, GetPayLoadIos(AMessage, 'default', 0, AFrom, ATo));
       // strMsg := UTF8Encode(strMsg);

        //StreamMsg := TStringStream.Create(UTF8Encode(strMsg), TEncoding.UTF8);
        //StreamMsg := TStringStream.Create(strMsg);
        //StreamMsg.SaveToFile('C:\TestOhneEncoding.txt');
        //StreamMsg.Seek(0, soBeginning);

        StreamMsg2 := TStringStream.Create('');
        StreamMsg2.WriteString(strMsg);
        StreamMsg2.Seek(0, soBeginning);

       // TCPClient.IOHandler.WriteLn(strMsg, TEncoding.UTF8);
        TCPClient.IOHandler.Write(StreamMsg2);
        TCPClient.Disconnect;
      except
        Result := False;
      end;
    finally
      TCPClient.Free;
      IdSSLIOHandlerSocketOpenSSL1.Free;
    end;
  Mit Zitat antworten Zitat