![]() |
iOS PushNotifications über TIdTCPClient
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; |
AW: iOS PushNotifications über TIdTCPClient
|
AW: iOS PushNotifications über TIdTCPClient
Delphi-Quellcode:
Im Falle einer Exception wird von der Funktion False als Result zurückgeben. Das Programm weiß dann "Oh, da ist offensichtlich irgendetwas unerwartetes passiert!" :)
except
Result := False; end; |
AW: iOS PushNotifications über TIdTCPClient
Ist ein Ausschnitt aus einer Testanwendung :-D
Es wird auch keine Exception geworfen. Der Client verbindet sich korrekt und auch der Write-Befehl wird ausgeführt. Nur Apple verwirft die Nachricht vermutlich. @bra: Ich habe schon vieles versucht um den Text in der richtigen Kodierung zu senden. Welche Info aus deinem Link wäre für mich relevant? |
AW: iOS PushNotifications über TIdTCPClient
Zitat:
Zitat:
|
AW: iOS PushNotifications über TIdTCPClient
Zitat:
Andererseits: wenn ich ![]() Wenn die Escape-Notation verwendet wird, sollte als Encoding ASCII angegeben werden. Das Encoding im Write nicht anzugeben ist gleichbedeutend mit "Default Encoding verwenden". Sicherer ist es, das richtige Encoding explizit anzugeben. |
AW: iOS PushNotifications über TIdTCPClient
Folgendes hat ohne Umlaute, Sonderzeichen, etc. funktioniert:
Delphi-Quellcode:
Dann habe ich versucht das ganze über UTF8 zu lösen, mit diesem Versuch ist überhaupt keine Notification angekommen egal ob mit oder ohne Sonderzeichen:if not TCPClient.Connected then TCPClient.Connect; strMsg := GetMessageIos(ADeviceToken, GetPayLoadIos(AMessage, 'default', 0, AFrom, ATo)); TCPClient.IOHandler.Write(strMsg, TEncoding.ANSI); TCPClient.Disconnect;
Delphi-Quellcode:
Wie würde das ganze mit der Escape-Notation aussehen?if not TCPClient.Connected then TCPClient.Connect; strMsg := GetMessageIos(ADeviceToken, GetPayLoadIos(AMessage, 'default', 0, AFrom, ATo)); strMsg := UTF8Encode(strMsg); TCPClient.IOHandler.Write(strMsg, TEncoding.UTF8); TCPClient.Disconnect; |
AW: iOS PushNotifications über TIdTCPClient
Hallo,
Zitat:
Delphi-Quellcode:
aus. Wieso kodierst du einen Unicode-String mit
strMsg: string
Delphi-Quellcode:
als UTF8 in einen Unicode-String und kodierst das kauderwelsch anschließend mit
strMsg := UTF8Encode(strMsg);
Delphi-Quellcode:
noch mal als UTF8? Wenn das
TCPClient.IOHandler.Write(strMsg, TEncoding.UTF8);
Delphi-Quellcode:
als ersten Parameter einen
TCPClient.IOHandler.Write
Delphi-Quellcode:
erwartet, wäre es richtig dort auch einen korrekten Unicode-String rein zu werfen. Und im zweiten Parameter nur anzugeben wie der weitergereicht werden soll.
string
Ob das dann mit Apple funktioniert weiß ich nicht. Mit den verschiedenen String-Kodierungen habe ich mich neulich selbst beschäftigt. Wenn man selbst einen String in einer speziellen Kodierung haben will, dann mit den Mitteln von
Delphi-Quellcode:
wie z.b.
TEncoding
Delphi-Quellcode:
.
TEncoding.UTF8.GetBytes(MyString)
einbeliebigername. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz