[iPhone iOS] UIWebview met authentication popup?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • CrankyGamerOG
  • Registratie: Juni 2003
  • Laatst online: 08-06 19:09

CrankyGamerOG

Assumption is the mother.....

Topicstarter
Ik weet niet of hier veel mensen rondlopen die bezig zijn met iOS(iPhone) programmeren, maar ik dacht aangezien dat de taal best makkelijk te beheersen is dat er denk ik wel een paar rond lopen.

Ik ben bezig met een aantal dingen puur om te testen of ik de taal kan leren , en tot nu toe gaat het best ok, al zeg ik het zelf.

Ik ben dus bezig met een "tabbar" app waarin ik een aantal urls(UIWebView) aanroep.

2 van deze tabs zijn sites die geen geldig certificaat hebben en een login vereisen.


Uiteraard heb ik voor elke tab een aparte ViewController aangemaakt, de tabs an sich werken ook gewoon goed, en de 2 tabs die naar normale niet https sites gaan werken ook zonder problemen, het gaat dus puur om de https sites die niet inladen(uiteraard omdat er geen Authentication Challenge/Response plaatsvind).

De url aanroep vind in principe als volgt plaats :

code:
1
[Naam loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://url:port"]]];


Nu had ik na een tijdje googlen het volgende gevonden :

code:
1
2
3
4
@interface NSURLRequest (DummyInterface)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end


En in de .m dit waar ik de url aanroep moet onderstaande dan tussen.

code:
1
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];



Dit zou er iig voor moeten zorgen dat hij elk certificaat moet slikken (of het toegestaan is voor de appstore laat ik even in het midden, en ook gaarne geen discussie erover).
Het lijkt er echter op alsof hij dit niet uitvoert ( dus alsof het alleen voor ios geld en niet voor iPhone iOS)


Maar ik schijn nergens met google te vinden hoe ik de Authentication Challenge en Response start/afmaak?

Wel vond ik dit stukje tekst erover
as you know, UIWebView does not provide opportunities to communicate with the server. I solved this problem this way: in the delegate method shouldStartLoadWithRequest of UIWebView I initiating another connection with NSURLConnection, and already in the method of the delegate NSURLConnection didReceiveAuthenticationChallenge processed the сhallenge from the server. Аnd in the method didReceiveResponse (if the challenge came) then again in the same UIWebView load the same URL (challenge has already been processed. Do not forget to cancel connection in didReceiveResponse, otherwise it will double the traffic.
Dit stukje tekst vond ik dus zonet, dus ik ga dit even rustig doorlezen en kijken of ik eruit komt, als mensen hier nog wellicht andere mogelijkheden weten, dan houd ik mij aanbevolen.

edit -----

ik kom net het volgende tegen wat me net iets interessanter lijkt

http://stackoverflow.com/...ial-persistence-in-iphone

[ Voor 6% gewijzigd door CrankyGamerOG op 31-08-2010 10:33 ]

KPN - Vodafone Ziggo Partner


Acties:
  • 0 Henk 'm!

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Voor een applicatie die ontwikkeld is bij het bedrijf waar ik werk, volstaat het gebruik van die category op NSURLRequest. Onze applicatie moet ook werken over een beveiligde verbinding en door gebruikt te maken van die "DummyInterface".

Maar als ik je code zo zie, lijkt het er op dat je de functie 'allowsAnyHTTPSCertificateForHost: niet geïmplementeerd heb, terwijl juist deze functie aangeroepen zou moeten worden op het moment dat een verbinding gemaakt gaat worden over https. Het lijkt er op dat je alleen de "setter" geïmplementeerd hebt, maar geen instance variable waar het resultaat in opgeslagen wordt en die weer wordt uitgelezen bij de "getter".

In onze applicatie is alleen de "getter" geimplementeerd, omdat wij altijd een certificaat willen accepteren over een beveiligde verbinding. Deze "getter" geeft altijd een return waarde "YES".

code:
1
2
3
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host {
    return YES; 
}


Maar als je in je code de return waarde wilt bepalen (dus niet persé altijd een certificaat accepteren), voeg dan een instance variable aan de category toe en set de waarde in je setter, lees de waarde uit in je getter.

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.