2012-03-26 21 views
5

UIWebView'dan bahsetmiyorum, bir mobil kullanıcı hesabı açmak istiyorum NSURLRequest.iOS: NSURLRequest'i doğrudan Safari'de açmak mümkün mü?

Neden? Uygulamamda, kullanıcı web sunucumuza zaten giriş yapmış. Kullanıcıya, kimlik bilgilerini yeniden girmek zorunda kalmadan web sayfasını başlatma seçeneği vermek istiyorum. Ancak, GET kullanamıyorum, çünkü bu onların kimlik bilgilerini URL'ye yerleştirir.

Böylece, bir NSURLRequest veya POST numaralı başka bir uygulamada uygulamamdan safari uygulamasını (UIWebView değil) açabilir miyim?

+2

Ne tür bir oturum yönetimi kullanıyorsunuz? Ve bu nedenle, bir kullanıcının kimlik bilgisi sınırları boyunca yeniden kimlik doğrulamasına sahip olmak neden maliyetli oluyor? – MrGomez

+0

Asla bunun pahalı olduğunu söylemedim, ama asıl nedeni, müşterimizin istediği şey bu. Oturum yönetimi gelince, webservice MVC 3. NET ve ben sadece bir çerez (şifre ile aynı nedenlerle url üzerinden göndermek istemediğimiz) olduğuna inanıyorum. – mtmurdock

+0

Anladım. Nihayetinde, bu güvenliği sağlamak için tel üzerinde bir kimlik bilgisi formu göndermelisiniz. HTTPS'yi sağlıyor ve Safari'nin sertifikaları doğru bir şekilde doğrulamasına izin veriyorsanız, istemciniz tarafından tel üzerinden gönderilen bir oturum tanımlayıcısı veya kimlik doğrulama kuponuyla ilgili bazı fikirleri öneriyorum. Bu yeterli olmaz mıydı? – MrGomez

cevap

10

Boynumu çizgiye koyacağım ve hayır - NSURLRequest'u doğrudan Safari'ye aktarmanın bir yolu yoktur. IOS'ta (birincil) uygulamalar arası iletişim ortamı URL'lere erişmek; nesneleri bir uygulamadan diğerine geçirmek için genel bir mekanizma yoktur.

Yapacağınız en iyi şey, uygulamada web sunucunuzdan bir one-time key almak ve ardından URL’deki Safari’ye geçmek. Ve eğer yapabilirseniz, bunu HTTPS ile yapın, böylece URL yolu ve sorgu bileşenleri yalnızca TLS anlaşması başarılı olduğunda görünür olur. Bu, ilgili kimlik bilgilerini görmekten başka kimseyi durdurmamalı ve başka bir yöntemle elde edilmiş olsalar bile (örneğin, URL'yi ekranınızdan kopyaladığınız gibi) yararlı olmalarını engellemelidir.

+0

Bu ilginç bir çözüm. Bir https bağlantısı kurabilir miyim emin değilim, ancak eğer işe yarayabilirse. – mtmurdock

+0

Bu cevapta tarafsızım. Onu desteklemek istiyorum, ama ilginç detayların çoğunu (güçlü bir kerelik anahtarın nasıl üretileceğini), (https://en.wikipedia.org/wiki/One-time_pad) ve teknik detaylarını geride bırakıyor. Yol şekilli kimlik bilgilerini garanti eden HTTPS anlaşması dünyaya sızmadı. Aksi takdirde katılıyorum. :) – MrGomez

+0

@MrGomez, detayı bildiğim için detay dışı bırakıyor. Cevabı topluluk wiki olarak işaretledim, bu yüzden umarım birileri bu bitleri doldurur mu? – Tommy

0

Bir NSURL veya yalnızca bir NSString kullanmak veya bu konu için yalnızca bir char * kullanmak daha kolay olurdu. iPhone'da çalışıp çalışmadığından emin değilim, çünkü iPhone, OSX gibi Darwin ile paralel çalışıyor, ancak iPhone'da bununla ilgili bazı kısıtlamalar var. Bu kesinlikle bir mac üzerinde çalışır.

NSString *url = @"http://www.apple.com"; 
    NSURL *myURL = [NSURL URLWithString:url]; 
    system([ [NSString 
       stringWithFormat:@"Open -a Safari %@", 
       [NSString stringWithContentsOfURL:myURL encoding:NSUTF8StringEncoding error:NULL] ] 
      cStringUsingEncoding:NSUTF8StringEncoding]); 

Ayrıca, bunun kötü bir fikir olduğunu öneriyorum (önlenebilirse). Bir iPhone kullanıcısı olarak, geliştiricilerin beni şu an bulunduğum uygulamadan uzaklaştırması beni çok rahatsız edici bulmayacağından eminim.

+0

Sorunuzu tekrar okurken yanlış anladım. İşe yaramaz cevap için özür dilerim. – anthropomorphic

+1

Bir iPhone'da açmak için sistem çağrısı yapmak yerine '[[UIApplication sharedApplication] openURL: myURL]' işlevini kullanacaksınız. Safari'nin, üçüncü tarafların yerleşik işlevlerini kopyalayan kurallarına göre Safari'ye sahip olursunuz. Bu nedenle, temelde, Safari'ye sahip olacağınızdan emin olmanız dışında, OS X'deki '[[NSWorkspace sharedWorkspace] openURL: myURL]' ile aynıdır. kaynak poster olarak öngörüldü. – Tommy

+0

Bilmekte fayda var, teşekkürler. Bu siteye yeniyim, bu yazıyı silmem mi yoksa olduğu gibi gitmemi mi merak ediyorum? – anthropomorphic

İlgili konular