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;