Marco Feltmann schrieb:
Der Zusatz in Klammern war Zynismus. Eindeutiger geht der Name kaum.
Das macht die Aussage, das viewDidLoad auf das Laden des Views wartet nicht richtiger.
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Marco Feltmann schrieb:
Der Zusatz in Klammern war Zynismus. Eindeutiger geht der Name kaum.
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
Marco Feltmann schrieb:
Wenn Du das 'warten' explizit als 'Fängt schon mal an und fährt dann fort.' verstanden hast
Marco Feltmann schrieb:
meine Interpretation von 'warten' als 'Fängt erst an, wenn es so weit ist
Marco Feltmann schrieb:
Also nicht Warten im Sinne von 'Lauf zum Bahnhof und wenn die Bahn kommt hol Mama ab.'
Marco Feltmann schrieb:
sondern Warten im Sinne von 'Die Bahn ist da. Lauf zum Bahnhof und hol Mama ab.'
Michael schrieb:
Hier wartet der den Abholer Beauftragende, um die Abholung zu beauftragen.
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
gandhi schrieb:
Michael schrieb:
Hier wartet der den Abholer Beauftragende, um die Abholung zu beauftragen.
So wie sich das anhört, solltest Du dich zum Bürokratie-Beauftragten fortbilden. Oder Dich in Brüssel bei der EU-Kommision zur Formulierung von unverständlichen Verordnungen bewerben. Die suchen immer fähige Leute
Michael schrieb:
Ich hätte zu Marcos Ausführungen zur viewDidLoad auch nichts gesagt, wenn nicht ausgerechnet in diesem Thread der Threadersteller hier zu der Annahme gekommen wäre, Methoden würden irgendwie während ihrer Ausführung auf magische Weise auf etwas anderes warten.
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
Michael schrieb:
Methoden würden irgendwie während ihrer Ausführung auf magische Weise auf etwas anderes warten.
macmoonshine schrieb:
DKCode schrieb:
Wie bringe ich die viewDidLoad Methode dazu, zu warten, bis die Benachrichtigung angekommen ist, bzw. die "methodOFReceivedNotication" vollständig durchgelaufen ist?
Das ist ein asynchroner Vorgang: Das Betriebssystem sendet das Device-Token irgendwann an die App, während diese läuft. Da solltest du keine synchronen Techniken verwenden. In der Programmierung wie im richtigen Leben gilt folgende Regel (bitte mitschreiben): Warten ist immer Scheiße.
Möglicher Lösungsweg:Anwendung und Beispiele für Benachrichtigungen: siehe oben!
- App-Delegate versendet Device-Token als Benachrichtigung (siehe oben).
- Viewcontroller registriert sich in viewDidLoad als Empfänger dieser Nachrichtenempfänger.
- Die Empfängermethode verarbeitet das Device-Token wie gewünscht.
Marco Feltmann schrieb:
DKCode schrieb:
Wie bringe ich die viewDidLoad Methode dazu, zu warten, bis die Benachrichtigung angekommen ist, bzw. die "methodOFReceivedNotication" vollständig durchgelaufen ist?
Gar nicht. Die -viewDidLoad Methode wartet darauf, dass das View geladen wurde. (Ich weiß, der Methodenname ist in dem Zusammenhang arg verwirrend… +scnr+)
PushNotifications sind asynchron. Auf asynchrone Antworten zu warten ist so ein bisschen wie 'Warten auf Godot'.
Die Antwort kann innerhalb einer viertel Sekunde da sein. Oder nach drei Wochen. Oder gar nicht.
Du müsstest also Deine Denkweise anpassen:
statt unbedingt zur Anzeigezeit des Views den deviceToken einblenden zu wollen lieber erst bei Bekanntgabe des deviceToken diesen einblenden.
Ganz stumpfes Beispiel: Das Textview, das den Token zeigen soll, mit einem 'Warte auf Token vom Server…' vorbelegen.
Vielleicht nach einem Timeout noch in ein 'Seit 60 Sekunden kein Token erhalten. Device offline?' ändern.
Und in der asynchron aufgerufenen Methode zur Notification einfach das Device Token im Textfeld setzen.
Lieber drei Monate darauf warten, dass das Token im Textfeld auftaucht (und den Programmierer auslachen, dass er nur von Sekunden ausgegangen ist – gibt nach drei Monaten ne hübsche Zahl) als drei Monate darauf warten, dass das View endlich angezeigt wird.
Michael schrieb:
gandhi schrieb:
Michael schrieb:
Hier wartet der den Abholer Beauftragende, um die Abholung zu beauftragen.
So wie sich das anhört, solltest Du dich zum Bürokratie-Beauftragten fortbilden. Oder Dich in Brüssel bei der EU-Kommision zur Formulierung von unverständlichen Verordnungen bewerben. Die suchen immer fähige Leute
Ja, ja, spotte du nur.
Ich hätte zu Marcos Ausführungen zur viewDidLoad auch nichts gesagt, wenn nicht ausgerechnet in diesem Thread der Threadersteller hier zu der Annahme gekommen wäre, Methoden würden irgendwie während ihrer Ausführung auf magische Weise auf etwas anderes warten.
gandhi schrieb:
Michael schrieb:
Methoden würden irgendwie während ihrer Ausführung auf magische Weise auf etwas anderes warten.
Ja, das ist mir auch aufgefallen, dass es da am grundlegenden Verständnis eines Programmablaufs mangelt. Insofern ein guter Einwurf
macmoonshine schrieb:
Wozu brauchst du eigentlich das Token im Viewcontroller?
DKCode schrieb:
Da diese Abläufe in der App passieren, sollte das Senden und Empfangen der NSNotification doch eigentlich synchron ablaufen und wenn nicht, dann immerhin ohne große Verzögerung?
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
Thallius schrieb:
Grob geraten weil er dort eine REgistrierungswebseite lädt in die er das Token eintragen will damit der Anwender nur noch den Submit Button klciken muss, da er nicht weiß wie man einen HHTP Request per Code macht?
DKCode schrieb:
Da diese Abläufe in der App passieren, sollte das Senden und Empfangen der NSNotification doch eigentlich synchron ablaufen und wenn nicht, dann immerhin ohne große Verzögerung?
Thallius schrieb:
Ich würde zu gerne mal wissen was das Endergebnis werden soll. Für mich klingt das alles total konfus. Du schickst Dir eine Push-Notification damit du einen DEvicetoken erhälst mit dem Du Dich via Webview bei einem Server anmelden kannst.....
Dir ist schon klar, dass Du, um Push-Nachrichten an ein Device schicken zu können, dieses sich vorher eh schon bei Deinem Server mit seinem Token registriert haben muss, damit dieser überhaupt eine Push-Nachricht verschicken kann????
macmoonshine schrieb:
Wozu brauchst du eigentlich das Token im Viewcontroller?
Thallius schrieb:
macmoonshine schrieb:
Wozu brauchst du eigentlich das Token im Viewcontroller?
Grob geraten weil er dort eine REgistrierungswebseite lädt in die er das Token eintragen will damit der Anwender nur noch den Submit Button klciken muss, da er nicht weiß wie man einen HHTP Request per Code macht?
Gruß
Claus
Marco Feltmann schrieb:
DKCode schrieb:
Da diese Abläufe in der App passieren, sollte das Senden und Empfangen der NSNotification doch eigentlich synchron ablaufen und wenn nicht, dann immerhin ohne große Verzögerung?
Sollte, könnte, dürfte… NSNotification laufen ungefähr synchron ab, ja. Allerdings kann es auch da zu Verzögerungen kommen, je nach Auslastung des Gerätes. Es ist meines Wissens nicht definiert, wann genau eine Notification gesendet wird und wann genau der Observer aufgerufen wird. Es ist also durchaus nicht das Verkehrteste von einer Verzögerung von bis zu 1 Minute im allerschlimmsten Fall auszugehen. Ein bisschen Pessimismus hat noch niemandem geschadet.
(Wie funktioniert das eigentlich in Swift? Ich meine, Objective-C ist ja von Natur aus geschwätzig und Swift eher introvertiert gestaltet…)
Du möchtest also das Laden der Website so lange hinauszögern, bis Du ein Device Token erhalten hast.
Dann setz' doch den WebView Inhalt erst, wenn die Notification da ist.
Beispiel: Dein WebView zeigt eine vorgefertigte 'Wait for Device Token' Seite an, die Du meinetwegen direkt im .ipa auslieferst.
In der für die Notification registrierten Methode lädst Du dann die URL, für die Du das Token brauchst.
Wozu Du Dich mit einem Device Token anmelden willst ist mir allerdings auch unklar.
Wie Thallius schon schrieb: um eine Push Notification zu bekommen musst Du Dich mit Deinem Device Token bereits registriert haben.
Vermutung:
Du möchtest das Device mit dem Token für weitere spezielle Push Notifications registrieren.
Dafür hast Du mit dem WebView den vollkommen falschen Ansatz gewählt und Du solltest lieber NSURLSession benutzen.
(Ich breche vielerorts eine Lanze für NSURLSession, obwohl NSURLConnection natürlich auch ginge…)
Michael schrieb:
DKCode schrieb:
Da diese Abläufe in der App passieren, sollte das Senden und Empfangen der NSNotification doch eigentlich synchron ablaufen und wenn nicht, dann immerhin ohne große Verzögerung?
Nein, auch innerhalb einer App gibt es asynchrone Abläufe.
Benachrichtigungen (NSNotification) können sowohl synchron, als auch asynchron verschickt werden. Das entscheidet der Sender der Benachrichtigung. Was immer asynchron bzw. vollkommen unabhängig voneinander ist, ist das Anmelden für eine Benachrichtigung und das Versenden einer Benachrichtigung. Mit der Anmeldung beim NSNotificationCenter sagt der Empfänger nur, dass er eine bestimmte Benachrichtigung empfangen will. Diese Anmeldung hat keinerlei Auswirkung auf den Sender. Der Sender verschickt die Benachrichtigung erst, wenn es einen Grund für die Benachrichtigung gibt.
DKCode schrieb:
Damit ich aber nun nicht Monate verstreichen lasse, um die Idee auf den Markt zu schmeißen, habe ich mich dafür entschieden WebViews zu nutzen, die vorerst meine WebApp laden.
DKCode schrieb:
Allerdings wenn es wirklich bis zu 1 Minute dauern kann, geht das für den User natürlich gar nicht
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
DKCode schrieb:
Das brauche ich, um wie oben beschrieben, den DeviceToken an die WebView-URL übergeben zu können.
Marco Feltmann schrieb:
DKCode schrieb:
Damit ich aber nun nicht Monate verstreichen lasse, um die Idee auf den Markt zu schmeißen, habe ich mich dafür entschieden WebViews zu nutzen, die vorerst meine WebApp laden.
Damit dürftest Du auf Probleme beim Freigabeprozess von Apple stoßen.
DKCode schrieb:
Allerdings wenn es wirklich bis zu 1 Minute dauern kann, geht das für den User natürlich gar nicht
Was tust Du, wenn das Gerät offline ist, es kein Token gibt weil die Server down sind etc.pp.?
macmoonshine schrieb:
DKCode schrieb:
Das brauche ich, um wie oben beschrieben, den DeviceToken an die WebView-URL übergeben zu können.
Warum versendest du das Token nicht per NSURLConnection.