2010-11-30 29 views
11

Trong một trò chơi Tôi đang phát triển sử dụng GameCenter, tôi muốn để xử lý các tình huống sau:GameCenter đăng nhập alert

  1. người dùng khởi động trò chơi. Ông được hiển thị cảnh báo hệ thống nhắc anh đăng nhập vào GameCenter. Anh ta bỏ qua nó bây giờ.
  2. sau một thời gian, người dùng muốn đăng nhập vào GameCenter và nhấp vào (ví dụ) mục menu Bảng thành tích. Anh ấy chọn hủy thay vì Đăng nhập, ngay bây giờ.
  3. quá trình lặp lại nhiều lần. Cuối cùng người dùng KHÔNG muốn đăng nhập vào GameCenter. Anh ta nhấp vào mục menu Bảng dẫn một lần nữa.

Trong các thử nghiệm của mình, tôi thấy rằng cửa sổ bật lên cảnh báo được gọi bằng "authenticateWithCompletionHandler" (như được gọi bằng mẫu GameCenterManager của Apple), đề xuất đăng nhập vào GameCenter chỉ xuất hiện một số lần giới hạn (4 hoặc 5). Lần cuối cùng nó xuất hiện, nó nói "Trung tâm trò chơi bị vô hiệu hóa, đăng nhập bằng ứng dụng Trung tâm trò chơi để bật" Sau đó ".Sau đó, gọi authenticateWithCompletionHandler không còn làm bất cứ điều gì có thể nhìn thấy -Không có dấu nhắc nào cả. Tuy nhiên, trong trường hợp của họ, cửa sổ bật lên nói rằng "Trung tâm trò chơi bị vô hiệu hóa" xuất hiện mỗi khi tôi nhấp vào mục GameCenter (ví dụ: Thành tích). : nghĩa là, nếu bạn chưa đăng nhập vào GameCenter, để cảnh báo trung tâm trò chơi chuẩn xuất hiện tất cả các lần bạn nhấp vào mục menu Bảng dẫn.

Có wa không y để tìm hiểu xem cảnh báo 'đăng nhập vào trung tâm trò chơi' tiêu chuẩn đã xuất hiện hay buộc nó xuất hiện mọi lúc (và không chỉ là lần thử đầu tiên)?

+1

Bạn đã bao giờ có thể hình dung điều này? –

Trả lời

3

Hành vi là điều gì đó có hiệu lực, sau N lần thử không thành công - vô hiệu hóa GameCenter cho ứng dụng. Khởi động lại ứng dụng hoặc đăng nhập vào chính gamecenter sẽ đưa nó trở lại trực tuyến.

Tôi quên tài liệu nào tôi đọc trong đó, nhưng có một tài liệu của Apple ở đó giải thích hành vi này.

+0

Khởi động lại ứng dụng dường như không khắc phục được sự cố. Và như OP đã nói, một ứng dụng khác, FruitNinja, dường như sử dụng một API để phát hiện trạng thái này. –

+3

tôi không nghĩ FruitNinja đang sử dụng API. Trong quan sát của tôi những gì họ làm là như sau: bất cứ khi nào họ nhìn thấy một Lỗi với Mã số 2 từ GameCenter ("Các hoạt động yêu cầu đã bị hủy bỏ.") Họ đang thiết lập một lá cờ nói "gameCenterDisabled". Lần tới ** người dùng ** cố gắng truy cập tính năng gamecenter, họ sẽ hiển thị cảnh báo – thumbsup

+0

FYI, trên iOS7, sau khi Trung tâm trò chơi bị vô hiệu hóa cho ứng dụng, việc đăng nhập thông qua ứng dụng trung tâm trò chơi không khắc phục được sự cố. Xem http://stackoverflow.com/questions/19013328/unable-to-sign-in-sandbox-gamecenter-on-ios-7/19013501#19013501 – Greg

1

Tôi đang chơi xung quanh với Trung tâm trò chơi ngay bây giờ tôi đã thấy hành vi rất giống nhau. Không có gì trong tài liệu nói bất cứ điều gì về hộp thoại chỉ hiển thị vài lần đầu tiên. Trong trường hợp của tôi, tôi muốn có một cách để nói trước nếu người dùng đã đăng nhập vào Game Center, để tôi có thể hành xử một cách thích hợp. Nhưng bây giờ tôi không thể biết điều này trước khi hộp thoại được hiển thị cho người dùng.

Vì chúng tôi đang chạy trong sandbox trong quá trình phát triển, hành vi này có thể là một cái gì đó hoạt động khác nhau trong quá trình sản xuất nhưng đây không phải là một điều dễ dàng để tìm hiểu.

8

Dưới đây là một là một ý tưởng workaround vấn đề này:

Không có vấn đề nếu một "GC authenticateWithCompletionHandler" -Request bị hủy

  • bởi người sử dụng khai thác "Hủy" trong hộp thoại

hoặc do thực tế là

  • GC bị tắt trên d evice (điều này xảy ra sau khi người dùng đã hủy chính xác hộp thoại cảnh báo 3 lần (ít nhất là trong iOS 5))

bạn sẽ luôn nhận được NSError với mã 2 nói "Thao tác đã yêu cầu đã bị hủy".

Trình phân biệt duy nhất mà tôi có thể tìm thấy là thời gian được chuyển giữa AuthenticateWithCompletionHandler-Request và thực thi Trình xử lý hoàn tất.

Vì vậy, khi gửi yêu cầu tôi đang tiết kiệm thời gian:

requestTime = [NSDate date]; 

và trong xử lý hoàn của tôi đo thời gian mất hiệu lực:

NSDate* now = [NSDate date]; 
CFTimeInterval elapsedTimeSinceAuthenticationRequest = [now timeIntervalSinceDate:requestTime]; 
NSLog(@"time Elapsed: %f", elapsedTimeSinceAuthenticationRequest); 

Nếu người dùng hủy yêu cầu, thời gian trôi qua sẽ dài hơn đáng kể so với thời gian trôi qua nếu GC hủy hoạt động. Trong các thử nghiệm của tôi, người dùng phải mất ít nhất một giây để hủy hộp thoại, trong khi yêu cầu được hủy GC ít hơn 0,1 giây (trên iPhone của tôi 4)

Tất nhiên, các giá trị này có thể khác nhau tùy theo thiết bị mã chạy trên và trên những gì người khác đang xử lý bận rộn tại thời điểm này. Một sự cố mà tôi đã kiểm tra là khởi chạy ứng dụng: Nếu bạn đang gửi authenticationRequest trong quá trình applicationDidFinishLaunching như được Apple đề xuất, mất nhiều thời gian hơn để GC hủy yêu cầu trong trường hợp của tôi, vì thiết bị đang bận tải chế độ xem và bất cứ thứ gì cần thiết để khởi chạy ứng dụng.

Vì vậy, hãy cho tôi biết nếu bạn đã cố gắng giải pháp này và nếu nó làm việc cho bạn, như sẽ i một lần tôi đã làm thử nghiệm thêm nữa ...

+0

Đây là giải pháp duy nhất; không chỉ là tuyên bố về "sự kiện". – junkdog

3

Tôi không thể tìm thấy câu trả lời hay cho điều này, vì vậy tôi quyết định chỉ sao chép thông báo sau khi tôi bắt đầu nhận được lỗi hủy. Điều này vẫn đang được phát triển nhưng về cơ bản nó thay đổi nút gọi lại để hiển thị cảnh báo lỗi thay vì hiển thị bảng dẫn đầu.

Chỉ cần lưu ý, không chắc chắn liệu điều này có được chấp thuận hay không kể từ khi tôi đang sao chép thông báo lỗi của Apple.

-(void) gcLogin: (id) sender { 
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) { 
     if(error) { 
      if([[error domain] isEqualToString:GKErrorDomain] && [error code] == GKErrorCancelled) { 
       [ResourceManager showAlertWithTitle:@"GameCenter Disabled" message:@"Sign in with Game Center application to enable"]; 
       mGameCenterCancelled = YES; 
      } 
      NSLog(@"%@", [error description]); 
     } else { 
      [self updateMenu]; 
      mGameCenterCancelled = NO; 
     } 
    }]; 
} 
0

Tôi đang gặp phải sự cố tương tự.Mặc dù tôi không thể tìm thấy cách để thực thi bật lên hộp thoại tương tự để đăng nhập vào Game Center, tôi đã tìm cách triển khai thông báo cảnh báo cho biết 'gamecenter bị tắt' khi người dùng nhấp vào biểu tượng hình chữ nhật dài:

if ([GKLocalPlayer localPlayer] .authenticated == NO)
{
// Nhắc một trung tâm trò chơi cảnh báo thông điệp cảnh báo nói là người khuyết tật
}
khác
{
// Tiến hành mở bảng dẫn
}

Hy vọng điều này sẽ hữu ích!

0

Có vẻ như iOS sẽ vô hiệu hóa hoàn toàn Trung tâm trò chơi và ngăn không cho nó nhắc sau khi người dùng chọn Tắt trò chơi Trung tâm (tùy chọn sẽ xuất hiện trên đăng nhập hủy thứ năm trong Trung tâm trò chơi của bạn).

Để khôi phục thiết bị về trạng thái ban đầu nơi lời nhắc đăng nhập sẽ xuất hiện lại. Chỉ cần đăng nhập bằng ứng dụng Trung tâm trò chơi bằng tài khoản Trung tâm trò chơi hoạt động bình thường (không kiểm tra). Khi bạn đã đăng nhập, Đăng xuất. Nó sẽ bắt đầu nhắc bạn lại trong ứng dụng của bạn.