Apple Game Center Dialog Stops Responding To Events - ios

I'm starting to integrate Apple's Game Center into an app I'm developing using the Cocos2d-x framework. I've written a very simple wrapper to connect the mostly C++ codebase to the Objective C calls required to interface with Game Center. I display the initial Game Center dialog with the following code:
[[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:viewController animated:YES completion:nil];
The dialog displays and I'm asked to choose a username. If I pick a username that's already taken, I get the following screenshot:
That's all well and good, but I've found that once I dismiss this popup, I can no longer do anything on this dialog page. I'm able to edit the text in the nickname box, but the Cancel and Next buttons no longer do anything, and I don't receive further notifications about whether or not my username is valid.
I feel it's likely due to some kind of view controller issue where messages are being sent to the wrong place after the popup appears, but since I'm a complete beginner at Objective C programming I have no idea what could be the cause.

So the answer seems to be to somehow trigger Game Center to forget my login information. I also turned on Logging under Settings/Game Center.
I had changed my Apple Login password on the same day this issue started happening, so I think it might be related to the particular device I was using not having synced information for my device sign in and the Game Center information.
One interesting change is that now when I insert an unavailable nickname, I get a list of suggestions that didn't appear before. All buttons now appear to be functional, so I'm in business!

Related

iOS Request permission dialog not showing on screen recording or quicktime video

Does anyone know when the App Store started requiring the app previews to be on a physical device and show this pop-up?
Even when I mirror my iPhone Xs to my Mac, the pop-up does not show. If no pop-up on video, app store rejects app preview.
Anyone know of a better way to get around this issue?
Another image that shows issue:
This pop-up NEVER shows on screen recording or mirroring....
We have same problem. You have two options:
You can record the screen from another mobile or camera
You can use a previous iOS. We have checked that permission dialog can be screen recorded with iOS12
What was your solution?
Yes,  has been steadily, over the past 3'ish years or so, working on removing certain system sensitive controls from being displayed in that feed. My guess it's for $SEKURITY reasons, though it doesn't completely make sense, to me, what would be the attack vector that it attempts to prevent.
The location dialog is not the only case I know that it hides. It originally started with them hiding even *** in the password text fields, and hiding the keyboard in such input, as well. Apparently it now expanded to location, and likely other system dialogs. 🤷‍♂️
Surprisingly few people seem to be discussing this.
I published an app last year (2021 / June) on 14.? which required the popup and it was accepted. Did this again with another app just after 15.? and I cannot get it past the apple store. Once they allowed me to post a video recording and I got it through, but since then ... no chance.
How are people getting their app through - I assume apple use the screen capture system to do their testing.
I had the same problem but my app was accepted.
Surely screen recording does not work, but screen capture does. I have embedded a screenshot of the permission dialog into a video and submitted it for app review.

What architecture can I use to change screens in Swift when there's an event outside of the current view?

For example, I have a Notification that occurs when there is an "unauthorized" error returned from the api server that should bring the user back to the login screen. This event could appear anywhere in the program.
Do I create a new viewless controller to manage states and have it monitor for this notification and then present the login view controller?
I'm thinking about push notifications too, received by the app delegate. Some of these may cause the data model to get updated and then the screen to change. Who should make the screen change? In the past I put all this in the AppDelegate. But there must be a more elegant way!
I also found out about FlowControllers. But they don't play nicely with Interface Builder, at least according to this solution.
Please let me know if you need more specific information about my project.

GameCenter - check previous login before calling handler?

My app uses Game Center. I try to log the user when the VC loads.
If he was previously logged - great, it logs him in with the notification on top. If he wasnt logged in - great, it shows the Game Center login VC.
However, i want not to 'jump' on the user with the Game Center login VC when he enters the app. I want to have a button that brings up the Game Center login VC, which is easy to do, so only when he clicks the button, the Game Center login VC will come up.
The problem is - i discovered (through trial and error), that if i try to log the user in, and it fails (for example, the user was not logged in to Game Center at all), and if i dont bring the Game Center login VC at that moment - within the first call of the handler - i cant bring it up later on.
I'll explain - I implemented the button i talked about, which brings the GC login VC up. if i dont try to automatically log the user in on load, the button works as expected. But if i do, and it fails (for whatever reason), the button will not bring the VC up no matter what.
observations -
this shows that this is indeed Apple policy.
trying to bring the GC login VC up after failed handler login doesnt work at all, not related at all to VC appearance.
I found this question here on stackoverflow, but could not find my answer there.
My questions to you are:
Is that intended that you can only call the handler once per app run (Even though VC was not shown at first handler call)?
Is it possible to do what i asked? if so - how? I would love to able to try to login without showing VC only if i know it will succeed, so i can 'save' the handler call for the button that shows the GC login VC. I know that the information is available in the handler (according to this), im wondering if there is another way.
To conclude my questions - Do i have to 'jump' the user with the
login VC the moment i try to log him in? (if there is a GC logged in
user on the device, a VC is not required)
I hope this was clear, since its a confusing situation.
Sorry for the long post!
Thanks alot for your time!
You keep some NSUserDefaults like 'userHasAttemptedToUseGameCenter'. It starts as NO or undefined, which to you means NO. Then when they press the game center button you set to YES and try to do the game center authentication. From then on every time they open the game (or at least every time they go to a game center related screen / feature, then you do game center authentication.
Even when its working fine because you have a game center user it can be a pain because the 'Welcome back' game center banner will pop down and cover the top part of your games UI for the first few moments.
If you just let the game center authentication come up every time but the user doesn't want it, I think after 3 failed attempts to authenticate iOS will NEVER show the authentication again. Your user will then be totally stuck if they change their mind later and want to use a feature that needs game center. You can detect that case only because game center won't authenticate! And all you can do then is tell the user to go to the Game Center app and log in there. Its hell to test. If one of your test devices gets into this locked out state you have to do a 'Reset all content and settings'.
Please someone chime in if this has gotten any better in iOS8.

Should touchID be displayed if app minimized

Im implementing touch ID to "unlock" my app, and im not sure if ive run into an apple bug or something i need to handle myself. If i tap the Home button and minimize my app before evaluatePolicy can load the Touch ID prompt, it appears over the home screen.
![not enough reputation to display screenshot, so heres a link]https://www.dropbox.com/s/zrhc60lx87ze7mt/IMG_0016.PNG
Successful/failure/cancel evaluation of this policy does nothing, but when i re-enter the app and cancel it again, touchID seems to be disabled forever until i restart the phone.
Anyone else running into this issue or have an ideas?
P.S. Theres an open radar where errSecUserCanceled is never returned from a cancel button tap, so right now i fall into my errSecAuthFailed case, which could also be the cause.
Answer is no. It should not be be displayed, when minimized.
The problem is IMHO that the code segment is being called again from your app when it goes to the background. For example loadView , didLoad and so on.
Try moving the code, that calls the authentication somewhere else in the program (different method).
For example, if your code uses a textView to enter password, you can implement the authentication within keyboardWillShow or similar.
Hope it helps.

SDK for More Games

I've seen some games which have a More Games button, on clicking of which it redirects to a list of games where the user can download the games. I wanted to have the same functionality for my game too. Which framework, SDK or extension offers such kind of functionality. Of course I want to generate revenue per download.
The SDK I tried are Tapjoy and Revmob, but they do not give the exact solution I wanted. Tapjoy shows a single app at a time, and revmob just shows an alert, asking the user to download a random free app.
Note: I've deleted the previous question and created a new question, as the previous question was downvoted for no reason and I couldn't got any answer on that.
RevMob offers the functionality you describe, but only for a single game that they choose, and gives you the choice of a Banner Ad, Full Screen Ad, Popup Alert (as you mention) or a link that you can set to be called directly from a button press.
Create a 'More Games' button and in its action place a call to RevMob like this,
[RevMobAds openAdLink];
Other alternative with RevMob is an already configure UIButton:
RevMobAds *revmob = [RevMobAds revMobAds];
UIButton *button = [revmob button];
API documentation

Resources