我使用webgame
(storyboard,而不是xib)移植到iOS的浏览器UIWebView
。该应用程序已发布,效果相对较好。我现在的挑战是正确实施GameCenter
,这样我就可以获得本地玩家的playerID,然后拥有一个可靠的用户唯一ID。这是我真正需要的唯一功能GameCenter
。
GameCenter
功能实际上已实现并且运行良好,但由于某种原因我仍然无法理解我无法使位于不同类文件中的setAuthenticateHandler访问UIebView
所以我可以通过POST加载一个传递playerId(以及其他参数)的URL。
WebViewController.m
有一种方法可以在UIWebView
中加载网址。 setAuthenticateHandler
会调用此方法,但UIWebView
为空,当然无法加载URL。如果我在WebViewController.m
内调用该方法,则URL正确加载。
我正在使用ARC,然后根据https://stackoverflow.com/a/14613361/3063226更改为MRC,但行为没有改变,UIWebView
GameCenter
调用时setAuthenticateHandler
仍然为空Load_URL
方法。
非常欢迎任何帮助。我已经尝试并研究了很多天才来到这里问一个问题,我被卡住了!
GCHelper.m
- (void)authenticateLocalUser {
if (!gameCenterAvailable) return;
NSLog(@"Authenticating local user...");
if (![GKLocalPlayer localPlayer].isAuthenticated) {
[[GKLocalPlayer localPlayer] setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (!error && [GKLocalPlayer localPlayer].playerID != nil)
{
NSLog(@"Player logged in GameCenter!");
NSLog([NSString stringWithFormat: @"1111 (GCHelper) playerID: [%@]", [GKLocalPlayer localPlayer].playerID);
// --
WebViewController *yourClassInstance = [[WebViewController alloc] init];
[yourClassInstance Load_URL:true]; // this is not working as expected!!
// -
}
else
{
NSLog(error.localizedDescription);
}
})];
} else {
NSLog(@"Already authenticated!");
}
}
WebViewController.h
#import <UIKit/UIKit.h>
@interface WebViewController : UIViewController <UIWebViewDelegate>
-(void) Load_URL:(BOOL)Nativa;
@property (strong, nonatomic) IBOutlet UIWebView *PagPrincipal;
@end
WebViewController.m
#import "WebViewController.h"
#import "NSData+AESCrypt.h"
#import "NSString+AESCrypt.h"
#import "NSString+URL_Encode.h"
#import "GCHelper.h"
@interface WebViewController ()
-(void) Load_URL:(BOOL)Nativa;
@end
-(void) Load_URL :(BOOL)Nativa
{
NSURL *url = [NSURL URLWithString: @"http://www.webgameurl.com"];
NSString *body = [NSString stringWithFormat: @"iac=%@", [self URL_Codigo :Nativa :vip_aux]];
NSMutableURLRequest *requestObj = [[NSMutableURLRequest alloc]initWithURL: url];
[requestObj setHTTPMethod: @"POST"];
[requestObj setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
// HERE!! This returns null when called from GCHelper.m, but is ok when called from WebViewController.m !!
NSLog([NSString stringWithFormat:@"Webview >>> >>> >>> [%@]", _PagPrincipal.description]);
_PagPrincipal.delegate = self;
[_PagPrincipal loadRequest:requestObj];
就是这样。 _PagPrincipal
本身就是UIWebView
,它是一个故事板。我不是iOS Objective-C专家,所以肯定有一些我不熟悉的东西。使用Xcode 6.1.1,该应用程序专为iOS8 +设计。在真正的iPad Mini 1(非视网膜)和iPhone 5中进行测试。