Ứng dụng iPhone có thể đọc cookie được Safari Mobile lưu trữ trước đây không?Ứng dụng xcode iPhone có thể đọc cookie được Safari Mobile lưu trữ trước đây không?
Trả lời
Để 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.
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.
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
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 trang web mục tiêu của bạn
- nghề một số javascript mà sẽ đọc document.cookie và trả lại dữ liệu bạn cần
- Trong webViewDidFinishLoad đại biểu, bơm javascript này vào UIWebView với stringByEvaluatingJavaScriptFromString tin nhắn
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?
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
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)
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;
}
Cookie được lưu với phương pháp này không bao giờ hết hạn? –
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ủ.
- Trong ứng dụng, bạn khởi chạy url máy chủ bằng safari di động.
- 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)
- Ứ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ể.
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
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:
- Launch săn thoại di động, sử dụng [[UIApplication sharedApplication] openURL: url];
- URL phải là một URL đặc biệt, ví dụ: http://yourwebsite.com/give-ios-app-the-cookie
- 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)
- 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.
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" –
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
- 1. Có thể nhận đường dẫn cookie được lưu trữ không?
- 2. Cookie của UIWebView được lưu trữ ở đâu?
- 3. Ứng dụng iPhone của tôi đang được lưu trữ dưới dạng "Lưu trữ ứng dụng Mac" chứ không phải "Lưu trữ ứng dụng iOS"
- 4. Đặt cookie trong ứng dụng iOS và đọc cookie đó từ Safari
- 5. Mobile Safari trên iPhone/iPod CSS hack
- 6. Cookie không được đặt trong Safari 6
- 7. Cách cài đặt các ứng dụng đã lưu trữ trước đó từ tổ chức xcode vào iphone của tôi
- 8. Không thể lưu trữ ứng dụng
- 9. Có thể lưu trữ tài nguyên được tải trong UIWebView của iPhone không?
- 10. Xcode 4 - Lỗi liên kết khi lưu trữ ứng dụng
- 11. XCode 4.3 Không thể tải lưu trữ liên tục UserDictionary.sqlite
- 12. Ứng dụng cục bộ html5 có thể có phiên asp.net không? (ứng dụng web cục bộ cho iPhone)
- 13. Android: Cách lưu trữ cookie?
- 14. Cookie có chỉ lưu trữ trên máy chủ thay thế cookie không có cookie?
- 15. XCode không triển khai ứng dụng iPhone cho iPhone 3GS
- 16. ASPXAUTH cookie không được lưu
- 17. OnSubmit with Mobile Safari
- 18. Lưu trữ và gửi cookie http không hoạt động trong ứng dụng PhoneGap
- 19. Cách chuyển hướng từ ứng dụng Mobile Safari sang ứng dụng Native iOS (như Quora)?
- 20. Làm cách nào để phát hiện, qua javascript trong Safari Mobile, nếu ứng dụng iPhone của tôi được cài đặt?
- 21. Lưu trữ mật khẩu trong NSString mà không thể đọc được trong bộ nhớ
- 22. Biến môi trường Xcode Không có trong Kho lưu trữ
- 23. Có lưu trữ cookie riêng cho hai UIWebView không?
- 24. Không thể mở tài liệu ".xib". Không thể đọc lưu trữ
- 25. Xcode - Đây có phải là MVC không?
- 26. Tôi có thể chạy lưu trữ ứng dụng cũ trong Trình mô phỏng không?
- 27. Mobile Safari: Audio + cache manifest
- 28. Xóa bóng bên trong textarea trên Mobile Safari (iPhone)
- 29. một XCode Project nhiều ứng dụng iPhone
- 30. HTML5 trên iPhone Safari - dữ liệu được lưu trữ bởi localStorage không phải lúc nào cũng tồn tại. Tại sao?
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
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