2012-02-29 22 views
5

Tôi có một Ứng dụng iPhone cho phép người dùng đăng nhập và tương tác với dịch vụ web. Tôi muốn có khả năng cho người dùng được tự động đăng xuất sau một khoảng thời gian không hoạt động ... cụ thể hơn nếu Ứng dụng đã ở chế độ nền trong một khoảng thời gian (ví dụ 1 giờ). Tôi lý tưởng muốn chạy kiểm tra trong ứng dụng phương thức App DelegateWillEnterForeground để kiểm tra xem ứng dụng đã ở chế độ nền sau bao lâu và sau đó nếu đã qua thời gian cho phép, hãy đưa chúng đến màn hình đăng nhập.Kiểm tra xem ứng dụng iPhone đã ở chế độ nền bao lâu khi đi vào nền trước

Tôi làm cách nào để chạy séc này theo phương pháp trên? Tôi sẽ đánh giá cao một số mã mẫu.

Nếu đây không phải là cách tốt nhất để đạt được yêu cầu của tôi thì đề xuất cũng được hoan nghênh!

Nhiều cảm ơn trước

Andy

Trả lời

11

Bạn có thể sử dụng này:

- (void)applicationWillResignActive:(UIApplication *)application 
{  
    NSDate *thisMagicMoment = [NSDate date]; 
    [[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    NSDate *thisMagicMoment = [NSDate date]; 
    NSDate *lastMagicMoment = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"]; 

    if (lastMagicMoment==nil) 
    { 
     NSLog (@"First launch!"); 
    } 
    else 
    { 
     NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0; 
     NSLog (@"Application was in background for %.1f hours", timeOfNoMagic); 

     //do your stuff - treat NSTimeInterval as double 

     if (timeOfNoMagic > 1.0) 
     { 
      //logout 
     } 
    } 
} 
+1

(Đây là ý kiến ​​cá nhân mà bạn có thể hoặc có thể không đồng ý với ...) Trong khi nó là tốt đẹp của bạn để làm công việc cho người đăng câu hỏi, tôi nghĩ rằng nó sẽ là tốt hơn để đăng một số hướng dẫn cho nơi người gửi bài câu hỏi có thể đi để tìm thêm thông tin hoặc những điều cần suy nghĩ về bằng văn bản việc triển khai của chính họ. Stack Overflow dần dần nhận được nhiều câu hỏi hơn, kết thúc bằng "vui lòng đăng một số mã" và mã đó xuất hiện trong câu hỏi khác với "Tôi có mã này và giờ tôi muốn thực hiện việc này. Vui lòng đăng mã". Mà không thực sự hỗ trợ học tập. –

+3

@Nick: Từ quan điểm giáo dục, tôi đồng ý 70%. Tôi nghĩ rằng mã hóa phải được học từ tài liệu nghiên cứu và cũng có thể nhìn thấy (đôi khi sao chép-dán) sẵn sàng thực hiện-mã. Học tập chỉ từ tài liệu của Apple sẽ là một nỗi đau trong ... Nhưng: SO không được sử dụng chỉ để học - nhiều người sử dụng nó như là kho lưu trữ công cộng cho đoạn mã ngắn giải quyết các vấn đề không quan trọng (làm tăng năng suất). Điều đó nói rằng: tôi đã +1 cho câu trả lời của bạn và ade một giờ trước đây chính xác bởi vì họ là giáo dục. Tôi sẽ (nếu tôi có thể) cung cấp cho tôi cũng +1 bởi vì nó có thể là một lần tiết kiệm thời gian cho bất cứ ai có cùng một 'vấn đề'. :-) –

+2

Điểm tốt, được thực hiện tốt. Ở đây - có +1 này :-) –

2

Viết thời gian và ngày để NSUserDefaults khi ứng dụng vào nền hoặc là bỏ thuốc lá. Sau đó đọc thời gian và ngày đó từ NSUserDefaults trong applicationWillEnterForeground và so sánh. Nếu nó là hơn 1 giờ (hoặc bất cứ điều gì bạn đặt thời gian chờ của bạn được) sau đó hiển thị màn hình đăng nhập.

2

Tiết kiệm thời gian khi ứng dụng nhập nền vào NSUserDefaults. sau đó đọc nó khi nó nhập lại tiền cảnh.

Trong ứng dụngWillEnterForeground nếu chênh lệch thời gian trên 1 giờ, bạn sẽ đặt cờ hoặc đăng thông báo. tức là bạn có thể có một phương pháp trong ủy quyền ứng dụng của bạn để ghi lại người dùng hoặc bạn có thể có dấu kiểm cho cờ trong chế độ xemWillAppear nếu cần đăng xuất người dùng.

0

Đầu tiên thiết lập bộ đếm thời gian trong phương pháp applicationDidFinishLaunching:

Bây giờ kiểm tra thời gian trong phương pháp applicationDidBecomeActive: điều này được gọi mỗi khi người dùng khởi động ứng dụng đó nữa.

Nếu thời gian lớn hơn cũ (1 giờ), hãy đặt lại hẹn giờ và đăng xuất người dùng.

+0

Trên thực tế bạn nên dừng tất cả các giờ chạy khi aplication nhập nền. –

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