2009-02-10 24 views

Trả lời

12

Để thực sự câu trả lời câu hỏi của bạn:

số

cookie Mobile Safari của không thể truy cập từ các ứng dụng SDK. Và mỗi ứng dụng SDK được cung cấp kho lưu trữ cookie và bộ nhớ cache WebKit riêng, do đó, trong khi các cookie sẽ vẫn tồn tại trong cùng một ứng dụng, chúng không thể truy cập được các ứng dụng betweeen.

+0

Hi Marco, Cảm ơn người đàn ông. Thats to và rõ ràng, ngay cả đối với tôi :). Bạn nói rằng mỗi ứng dụng SDK được cấp bộ nhớ cache WebKit riêng của mình, tôi giả định rằng chúng có thể được truy cập bằng lớp HSHTTPCookieStorage. Hay tôi vẫn còn cách nào? – TonyNeallon

+0

Tôi không chắc chắn - tôi chưa bao giờ thử. Hãy dùng thử. Chỉ một vài phút làm việc để nhúng UIWebView, nó tải một URL cho một trang web sẽ cung cấp cho nó một cookie, sau đó thử đọc cookie. Tôi có thể làm điều đó với Javascript nếu webview vẫn có thể truy cập được. (stringByEvaluatingJavascriptString :) – Marco

4

Vì hộp cát trên iPhone bạn không có quyền truy cập vào cookie của Safari. Bạn chỉ có thể truy cập các cookie được tạo trong ứng dụng của bạn - ví dụ như một UIWebView.

+0

hi mfazekas, Cảm ơn một lần nữa cho câu trả lời của bạn. Các tập tin cookie được thiết lập thông qua một javascript của một trang tôi tải từ thư mục tài liệu của ứng dụng của tôi vào kiểm soát UIWebView của ứng dụng của tôi. Điều này có đảm bảo rằng các cookie được lưu trữ trong hộp cát ứng dụng của tôi không? Cảm ơn người giúp đỡ của bạn. – TonyNeallon

3

Mặc dù bạn đã hỏi những câu hỏi tương tự twicebefore, đây là một cách tiếp cận chưa được đề cập ...

Đây có thể là một chút phức tạp, nhưng bạn có thể làm những việc Greasemonkey-esque với một UIWebView. Một cái gì đó như thế này:

Tôi đã sử dụng kỹ thuật này để cải thiện trang bên thứ ba trong ứng dụng iPhone, nhưng tôi không chắc liệu nó có đọc cookie từ cùng một nơi với Safari mobile hay không.

Đáng giá bắn?

+0

Xin chào Paul, Cảm ơn bạn đã đề xuất.Tiêm javascript để đọc document.cookies vẫn không trả lại gì cả. Nhưng nó là giá trị cố gắng. Suy nghĩ tôi đã có nó :) – TonyNeallon

0

Bạn có thể muốn kiểm tra

if ([[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy] != NSHTTPCookieAcceptPolicyAlways) { 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];  
} 

Nhưng dường như NSHTTPCookieStorage thậm chí không giữ cookie từ yêu cầu cuối cùng trong việc áp dụng hiện nay trên iOS (rdar: // 8.190.706)

2

Dưới đây là utils tôi có được/đặt phương thức cookie.



+(void)setCookie:(NSString *)key withValue:(NSString *)value { 
    NSArray *keys = [NSArray arrayWithObjects: 
        NSHTTPCookieDomain, 
        NSHTTPCookieExpires, 
        NSHTTPCookieName, 
        NSHTTPCookiePath, 
        NSHTTPCookieValue, nil]; 
    NSArray *objects = [NSArray arrayWithObjects: 
         @"YOURDOMAIN", 
         [NSDate distantFuture], 
         key, 
         @"/", 
         value, nil];  
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict]; 
    NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    [sharedHTTPCookieStorage setCookie:cookie]; 
} 

+(NSString *)getCookie:(NSString *)key { 
    NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:[NSURL URLWithString:@"YOURDOMAIN"]]; 
    NSEnumerator *enumerator = [cookies objectEnumerator]; 
    NSHTTPCookie *cookie; 
    while (cookie = [enumerator nextObject]) 
    { 
     if ([[cookie name] isEqualToString:key]) 
     { 
      return [cookie value]; 
     } 
    } 
    return nil; 
} 
+0

Cookie được lưu với phương pháp này không bao giờ hết hạn? –

10

Có thực sự là một cách thú vị nếu bạn có quyền truy cập vào url máy chủ.

  1. Trong ứng dụng, bạn khởi chạy url máy chủ bằng safari di động.
  2. Url máy chủ mục tiêu đọc cookie và chuyển hướng trở lại một địa chỉ cụ thể ứng dụng (myapp: // Cookie = 123)
  3. Ứng dụng sau đó được chuyển trở lại và bạn có thể đọc giá trị từ xử lý url

Đó là một chút hacky như các ứng dụng sẽ chuyển safari di động và sau đó ngay lập tức chuyển trở lại ứng dụng. Nhưng, có thể.

+0

Xin chào, đây là nhận xét về câu trả lời khá cũ. Apple bắt đầu từ chối chuyển đổi này sang safari và quay trở lại ứng dụng cách đây vài năm. Tôi nghĩ đó là một giải pháp khá tốt vào thời điểm câu trả lời được đưa ra. – lnjuanj

6

Lưu ý rằng trên iOS 8, có lẽ bạn nên sử dụng Safari Password Sharing để giải quyết một số trường hợp sử dụng làm phát sinh vấn đề này.

Điều này không trực tiếp có thể, nhưng với sự hợp tác của trang web, điều đó là có thể.

Để làm rõ, trường hợp người dùng là một ứng dụng Objective C muốn đọc giá trị của cookie đã được thiết lập bởi một trang web trong safari di động. (. Tức là nói riêng, một UIWebView không tham gia vào việc thiết lập cookie)

Ứng dụng của bạn nên làm điều này:

  1. Launch săn thoại di động, sử dụng [[UIApplication sharedApplication] openURL: url];
  2. URL phải là một URL đặc biệt, ví dụ: http://yourwebsite.com/give-ios-app-the-cookie
  3. Trên trang web của bạn, khi url được đưa ra, vấn đề chuyển hướng tới bạn-app-url-Đề án: cookievalue = (ví dụ như Angry Birds:. Cookievalue = hh4523523sapdfa)
  4. khi đại biểu ứng dụng của bạn nhận được - (BOOL) ứng dụng : (UIApplication *) ứng dụng openURL: (NSURL *) url sourceỨng dụng: (NSString *) Chú thích sourceApplication: (id) chú thích xử lý url để lấy giá trị cookie

Lưu ý rằng bạn không nên tự động làm điều này khi ứng dụng bắt đầu - người dùng sẽ thấy chuyển sang Mobile Safari và ngược lại, vốn không phải là trải nghiệm người dùng tốt và Apple sẽ từ chối ứng dụng của bạn (Apple cũng xem đây là "tải dữ liệu cá nhân của người dùng lên máy chủ mà không có sự đồng ý trước của họ "). Nó sẽ là tốt hơn để làm điều đó để đáp ứng với người sử dụng, chú ý đến kinh nghiệm người dùng - ví dụ. chờ người dùng nhấn nút "đăng nhập", sau đó thực hiện và nếu người dùng chưa đăng nhập vào trang web của bạn, http://yourwebsite.com/give-ios-app-the-cookie sẽ hiển thị cho người dùng màn hình đăng nhập trong safari. Nếu người dùng đăng nhập, bạn có thể hiển thị nhanh màn hình "Tự động đăng nhập bạn ..." trong một hoặc hai giây trong Safari trước khi chuyển hướng người dùng trở lại.

Không có cách nào để làm điều này để làm việc với hotmail/gmail/etc tất nhiên - nó cần phải được trang web của riêng bạn.

Tín dụng chuyển đến Unique Identifier for both mobile safari and in app in iOS để đề xuất loại phương pháp này.

+1

Nguồn tài liệu tốt nhất cho "Chia sẻ mật khẩu Safari" là Phiên bản 506 của WWDC2014: "Ứng dụng, Trang web và Safari của bạn" –

11

Tính năng iOS 9, điều này là có thể!

Sử dụng sfSafariViewController.

Bạn sẽ cần phải thiết lập:

  • Một custom URL scheme trong ứng dụng của bạn để nhận dữ liệu cookie.
  • Trang web bạn đang nhận cookie sẽ cần triển khai API cụ thể cho sơ đồ URL tùy chỉnh của ứng dụng, để chuyển hướng quay lại ứng dụng của bạn.

Bạn có thể sao chép này repo có bản trình diễn đầy đủ về điều này.

Hope this helps,

Liam

Các vấn đề liên quan