如何使用GameCenter数据作为参数在Uiwebview中加载URL?

时间:2015-03-12 00:12:01

标签: ios uiwebview uistoryboard game-center

我使用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中进行测试。

0 个答案:

没有答案