2010-11-30 34 views
11

在一場比​​賽中,我使用GameCenter的發展,我想處理以下情形:的GameCenter登錄警報

  1. 用戶啓動遊戲。他會顯示系統提醒,提示他登錄GameCenter。他現在忽略它。
  2. 過了一段時間,用戶想要登錄GameCenter並點擊(例如)排行榜菜單項。現在,他選擇取消而不是登錄。
  3. 該過程重複幾次。最終用戶希望登錄到GameCenter。他再次點擊排行榜菜單項。

在我的測試中,我發現,通過電話提出的警告彈出窗口「authenticateWithCompletionHandler」(蘋果的樣品GameCenterManager的調用),這意味着登錄到GameCenter的只出現的次數是有限的(4或5)。最後一次出現時,它顯示「Game Center Disabled」,用Game Center應用程序登錄以啓用「Afterwards」。之後,調用authenticateWithCompletionHandler不再執行任何可見的操作 - 完全不提示任何操作。但是,在他們的情況下,每當我點擊一個GameCenter項目(例如成就)時,彈出窗口就會顯示「Game Center Disabled」。

我想要做的是複製功能:也就是說,如果您未登錄到GameCenter,則會一直顯示標準遊戲中心警報,您單擊排行榜菜單項。

是否有一個wa ❖瞭解標準「登錄遊戲中心」的警報是否已出現,或迫使它出現在任何時候(而不僅僅是第一次嘗試)?

+1

你有沒有想過呢? – 2011-07-07 23:45:44

回答

3

這種行爲是在N次嘗試失敗後禁用應用程序的GameCenter後產生的效果。重新啓動應用程序或在Gamecenter中登錄會使其重新聯機。

我忘記了哪個文檔是我讀過的,但有一個Apple文檔解釋了這種行爲。

+0

重新啓動應用程序似乎無法解決問題。正如OP所述,另一個應用程序FruitNinja似乎使用API​​來檢測這種狀態。 – 2011-07-07 23:46:50

+3

我不認爲FruitNinja使用的是API。根據我的觀察,他們所做的事情如下:每當他們從GameCenter看到代碼2出錯時(「請求的操作已被取消」),他們正在設置一個標誌,標明「gameCenterDisabled」。下一次**用戶**嘗試訪問遊戲中心功能,他們在iOS7上顯示警告 – thumbsup 2012-01-16 12:59:06

1

我現在正在玩Game Center,現在我已經看到了同樣的行爲。文檔中沒有任何內容只是說明前幾次對話的任何內容。 在我的情況下,我想提前告訴用戶是否已經登錄到Game Center,以便我可以正確行事。但是現在我不能在向用戶顯示對話框之前知道這一點。

由於我們在開發過程中在沙箱中運行,這種行爲當然可能在生產過程中表現不同,但這不是一件容易找到的事情。

8

這裏有一個是一個想法,以解決此問題:

沒有如果「GC authenticateWithCompletionHandler」 - 請求被取消

  • 用戶在對話框
攻「取消」事

或由於以下事實:

  • GC在d上被禁用evice(發生在用戶完全取消警告對話框3次後(至少在iOS 5中))

您將始終收到NSError,其中代碼2表示「請求的操作已被取消」。

我能找到的唯一區別是authenticateWithCompletionHandler-Request和completion-Handler的執行之間的時間。

所以發送請求當我節省了時間:

requestTime = [NSDate date]; 

,在我完成處理我測量流逝的時間:

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

如果用戶取消了請求,時間的流逝與GC取消手術的時間相比要長得多。在我的測試中,用戶至少需要一秒鐘才能取消對話,而GC取消的請求需要不到0.1秒(在我的iPhone 4上)

當然,這些值可能會因設備而異代碼會在處理器目前忙於處理的基礎上運行。我已經檢查過的一個缺陷是應用程序啓動:如果您在AppleDialFinishLaunching期間發送authenticationRequest,則GC在我的情況下取消請求需要更長的時間,因爲設備正忙於加載視圖以及啓動所需的任何內容應用程序。

因此,讓我知道,如果你嘗試這種解決方案,如果它爲你工作,這將我一次,我已經做了進一步的測試...

3

我無法找到一個好的答案,所以我決定只複製消息一旦我開始得到取消錯誤。這仍在開發中,但它基本上會將按鈕回調更改爲顯示錯誤警報,而不是顯示排行榜。

只是一個筆記,不知道這是否會被批准,因爲我複製了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

我正面臨同樣的問題。雖然我找不到強制彈出登錄Game Center的同一個對話框的方法,但我確實找到了一種方法來實現警告消息,當用戶單擊排行榜圖標時,會顯示「gamecenter已禁用」:

如果([GKLocalPlayer localPlayer] .authenticated ==否)
{
//提示警告消息警報說遊戲中心被禁用
}
別的
{
//繼續與開口排行榜
}

希望這有助於!

0

iOS似乎會完全禁用Game Center,並在用戶選擇禁用Game Center後阻止提示(該選項會出現在您的第5個Game Center取消登錄中)。

將設備恢復到登錄提示再次出現的原始狀態。只需使用正常工作的Game Center帳戶(非測試人員)即可使用Game Center應用登錄。一旦進入,註銷。它應該開始在您的應用程序中再次提示您。