アプリからウェブページを呼び出す
ウェブページの表示とか、ウェブページの呼び出しとか、アプリにちょっとしたヘルプを付けたり、ネットワークを通して外部のページを呼び出したり、覚えておくと以外に便利につかえるものです.
ゲームアプリだと、ヘルプの表示に利用するのがほとんどだと思うんですけど...
そんなわけで、アプリから safari を呼び出してみたり、アプリ内部の html を自身のアプリで表示したりしてみました.
WebView
UIWebView を利用すると、手軽にアプリ内で webページの表示を行うことができる.
表示できるページは、通常の Safari と同様、url を指定してインターネット上のページを開くこともできるし、
アプリケーションに含めたhtmlなんかも表示することができる.
@interface WebToSampleAppDelegate : NSObject <UIApplicationDelegate> { UIWindow* m_window; IBOutlet UIWebView* m_web_view; } @property (nonatomic, retain) IBOutlet UIWindow* window; @property (nonatomic, retain) UIWebView* webView; /// WebView の表示へ - (IBAction) gotoWebView; @end
@implementation WebToSampleAppDelegate @synthesize window = m_window; @synthesize webView = m_web_view; - (void)applicationDidFinishLaunching:(UIApplication *)application { [m_window addSubview:m_web_view]; [m_web_view loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://d.hatena.ne.jp/It_lives_vainly/"]]]; [m_window makeKeyAndVisible]; } - (void)dealloc { [m_web_view release]; [m_window release]; [super dealloc]; } @end
切りはりしただけなんで、このコードでそのまま動かなかったらごめん.
まぁ、このぐらいで出来ますよ程度に捉えてもらった方が良いかと...
UIWebView の loadRequest には、NSURLRequest を指定することになる.
NSURLRequest には、 NSURL を渡すのだが、この URL がファイルのURLだったら、そのファイルが開かれることを覚えておきたい.
つまり、アプリケーション内にあるhtmlを開くことも可能.
具体的な指定方法は、次のようになる
NSString* a_path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSURL* a_url = [NSURL fileURLWithPath:a_path]; [m_web_view loadRequest:[NSURLRequest requestWithURL:a_url]];
URLスキームの利用
iPhone では、自分以外の iPhone アプリケーションと連動して動作する仕組みとして、URLスキームを利用することができる.
つまり、これを利用して、自作のアプリから Safari を呼び出したり、 Mail,AppStore,YouTube,Maps 等を呼び出すことができる.
(他のアプリが呼び出された場合、アプリは終了する)
URLスキームなどと言っても特に難しいことはなく、 YouTube の動画へのURLを指定すれば YouTube アプリケーションが立ち上がるし、
AppStore へのURLなら AppStore アプリが立ち上がる.
念のため、エントリーの下の方に例示をしておく.
※ URLスキームを使って、他の*自作*アプリを呼び出すこともできるんですか?(教えて偉い人)
URLを指定して Safari を開く
アプリケーションから、URLを指定して Safari を開くのは次のようにする.
(アプリは終了する)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://d.hatena.ne.jp/It_lives_vainly/"]];
ここで指定するURLにも、当然のようにURLスキームが利用できるので、直接アプリの"Maps"や"YouTube","AppStore"を
呼び出すことが可能.
URLスキームの補足
URLスキームは、アプリから呼び出す時以外に、htmlから指定することも可能.(むしろ、そちらが本分)
htmlから指定するときには、通常のリンクと同様にリンクのタグで指定すればよい.
<a href="http://www.xxxx.jp/">HIGI Page.</a><BR> <a href="mailto:hogehoge@me.com">higp_support@hicorp.co.jp</a><BR> <a href="tel:03-0123-4567">03-0123-4567</a><BR> <a href="http://www.youtube.com/watch?v=xxxxxx">Youtube.<a><BR>> <a href="http://maps.google.com">map.<a><BR> <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=xxxxx&mt=x">store<a><BR>
NSURL* a_url = [NSURL URLWithString:@"mailto:hogehoge@me.com"];
電話
NSURL* a_url = [NSURL URLWithString:@"tel:03-0123-4567"];
htmlで指定した場合、電話番号の検出は、(デフォルトでは)自動でも行われてしまうので、誤った解釈をされたくない場合には、
htmlにメタタグを埋め込んでおく必要がある.
<head> <meta name = "format-detection" content = "telephone=no"> </head>
YouTube
NSURL* a_url = [NSURL URLWithString:@"http://www.youtube.com/watch?v=xxxxxxxx"]
Maps
NSString* a_addr = [NSString stringWithCString:"JR東京駅" encoding:NSUTF8StringEncoding]; NSString* a_query = [a_addr stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL* a_url = [NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", a_query]];
アプリから使用したい場合には、クエリーの文字列に気を付けること.
上の例を参考にしていただければ分かると思うが、 UTF8エンコーディングを行っている.
google map のクエリーは、他にも色々あるようだが割愛する.
AppStore
NSURL* a_url = [NSURL URLWithString:@"http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=xxxxxxx&mt=xxx"]
AppStore へのリンクは、規則がめんどくさいので、生成のために "ITMS Link Maker" というwbbebベースのツールを利用する.
ITMS Link Maker へのリンク.
http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/itmsLinkMaker
おわりに
さすがにこのあたりのことは、きっちりと整備されていてとても便利です.