2015年4月9日木曜日

[Unity][ios][Hagoita] NSURLProtocol を使ったiOS連携のテスト

Unityで出力したProjectでのHagoitaが導入できるかテストしてみました
Hagoita: https://github.com/withstandist/hagoita

今回は、簡単な動作テストのため、HKURLProtocolをカスタマイズしたものを使います。
つまり、普通にNSURLProtocolとUnityの連携になります。
1,Unityで,uGUIでボタンを作成
using UnityEngine;
using System.Collections;

public class buttonAction : MonoBehaviour {

 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 }

 public void ClickTest () {
  Debug.Log ("Clicked.");
  StartCoroutine(Get("http://localhost:7777/test"));
 }

 IEnumerator Get (string url) {
  // 送信開始
  WWW www = new WWW (url);
  yield return www;
  
  // 成功
  if (www.error == null) {
   Debug.Log ("Get Success");
  } else {
   Debug.Log ("Get ERROR");
  }
 }
}
2、HKURLProtocolカスタムを用意
//
//  HKURLProtocol.m
//  Unity-iPhone
//
//  Created by KIMITA Yusuke on 2015/04/09.
//
//

#import "HKURLProtocol.h"

@implementation HKURLProtocol


+ (BOOL)canInitWithRequest:(NSURLRequest *)request{
    NSLog(@"canInitWithRequest");
    return YES;
}


+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
    return request;
}

- (void)startLoading
{
//Alertをだしてみた
    UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
    
    [self responseJSONWithHttpStatusCode:200 data:[@"{}" dataUsingEncoding:NSUTF8StringEncoding]];
}

- (void) responseJSONWithHttpStatusCode:(int)statusCode data:(NSData*) data{
    NSDictionary*headers = [NSDictionary dictionaryWithObjectsAndKeys:@"application/json", @"Content-Type",
                            [NSString stringWithFormat:@"%ld",[data length]], @"Content-Length",
                            nil];
    NSHTTPURLResponse* response = [[NSHTTPURLResponse alloc] initWithURL:[self.request URL]
                                                              statusCode:statusCode
                                                             HTTPVersion:@"1.1"
                                                            headerFields:headers];
    
    [self.client URLProtocol:self
          didReceiveResponse:response
          cacheStoragePolicy:NSURLCacheStorageNotAllowed];
    
    [self.client URLProtocol:self didLoadData:data];
    [self.client URLProtocolDidFinishLoading:self];
}

- (void)stopLoading
{
}

@end
3、UnityAppController.mmでNSURLProtocolを登録する
- (void)startUnity:(UIApplication*)application
{
    [NSURLProtocol registerClass:HKURLProtocol.class];

4、結果
できました。
アンドロイドでの同様な仕組みができれば、使い道は広がりそうです。

0 件のコメント:

コメントを投稿