2012-02-08 27 views
13

Tôi đang tìm cách xác định duy nhất một chiếc iPhone để máy chủ của chúng tôi có thể phản hồi với một số html tùy chỉnh. Tôi muốn có thể xác định điện thoại trong Safari và trong trình duyệt được nhúng trong ứng dụng. Vì mỗi ứng dụng được sandbox, cookie sẽ không hoạt động.Số nhận dạng duy nhất cho cả safari di động và trong ứng dụng trong iOS

Cảm ơn

+0

Bạn có thể làm rõ ý nghĩa của mình bằng "nhận dạng duy nhất" - ý bạn là bạn có thể biết khi nào cùng một điện thoại truy cập trang web của bạn qua ứng dụng hoặc qua Mobile Safari? –

+0

yup Tôi muốn biết thời điểm điện thoại truy cập trang web của chúng tôi trong ứng dụng hoặc trong trình duyệt dành cho thiết bị di động –

Trả lời

10

Điều này thực sự rất khó.

Bạn có thể lập trình ứng dụng để nó khởi chạy Mobile Safari khi nó lần đầu tiên mở và đặt cookie, sau đó chuyển hướng trở lại ứng dụng bằng cách sử dụng lược đồ URL tùy chỉnh.

Điều đó có vẻ kỳ lạ nhưng thực tế hệ thống đăng nhập được chia sẻ của Facebook hoạt động như thế nào và nó cho phép cả ứng dụng lẫn trình duyệt "thoát ra" khỏi hộp cát của chúng và chia sẻ cùng một ID cookie duy nhất.

Tất nhiên bạn sẽ không biết liệu người dùng đã xóa cookie trừ khi bạn thực hiện chuyển hướng mỗi khi ứng dụng khởi chạy, điều này có thể gây phiền nhiễu.

UPDATE:

Tính đến iOS 9, bây giờ bạn có thể mở trang sử dụng SFSafariViewController bên trong ứng dụng của bạn thay vì chuyển hướng đến các ứng dụng Safari. Điều này vẫn còn một chút clunky, nhưng có thể thích hợp hơn với một chuyển đổi ứng dụng kép.

+0

Ý tưởng tuyệt vời nhưng theo http://stackoverflow.com/questions/8636202/generating-a-non-udid-identifier-in- javascript-to-ident-ios-devices-uniquel các cookie được tắt theo mặc định trong Mobile Safari.Tôi nhận được bất cứ điều gì sai (xin vui lòng tha cho tôi cho một câu hỏi newbie, tôi là một newbie thực sự để phát triển iOS)? –

+0

Cookie của bên thứ ba bị tắt, nhưng bên thứ nhất (những người từ cùng một tên miền với trang bạn đang truy cập) được bật theo mặc định. –

12

Đây không phải là trực tiếp có thể, nhưng với sự hợp tác của các trang web có thể như Nick Lockwood đã tuyên bố, và đây là một phiên bản mở rộng đáng kể của phương pháp ông mô tả:

Ứ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 người đặc biệt, ví dụ như. http://yourwebsite.com/give-ios-app-the-cookie
  3. Trên trang web của bạn, khi url được đưa ra, đưa ra một chuyển hướng để your-app-url-scheme:cookievalue=<somevalue> (ví dụ. angrybirds:cookievalue=hh4523523sapdfa)
  4. khi đại biểu ứng dụng của bạn nhận được - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation quá trình url để có được những giá trị cookie

Lưu ý rằng bạn không nên làm điều này tự động khi ứng dụng khởi động - 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ần sự đồng ý trước của họ ").

Sẽ tốt hơn nếu bạn làm điều đó để phản hồi người dùng, chú ý đến trải 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.

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