Submit Search
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
5 likes
5,965 views
聡 大久保
NSURLConnection/NSURLSessionを利用して、Webからデータを取得するプログラムを学びます。
Technology
Business
Read more
1 of 21
Download now
Downloaded 19 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
More Related Content
PDF
Ansibleで味わうHelion OpenStack
Masataka Tsukamoto
PDF
OpenStack & Ansible で実現する自動化
Hideki Saito
KEY
おしべめしべ
puriketu99 --
PDF
Ansible quickstart
Hideki Saito
PDF
OpenStack Osloを使おう - cliff編
Hideki Saito
PDF
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
Takeshi Kuramochi
PPT
初めての REST - Representational State Transfer
Tatsumi Naganuma
PDF
Ansible2とOpenStackの関係
Hideki Saito
Ansibleで味わうHelion OpenStack
Masataka Tsukamoto
OpenStack & Ansible で実現する自動化
Hideki Saito
おしべめしべ
puriketu99 --
Ansible quickstart
Hideki Saito
OpenStack Osloを使おう - cliff編
Hideki Saito
インフラ自動構築エンジン "Ansible"の勘所を1日でつかむ ~基礎入門編~
Takeshi Kuramochi
初めての REST - Representational State Transfer
Tatsumi Naganuma
Ansible2とOpenStackの関係
Hideki Saito
What's hot
(16)
PDF
運用の現場での監視運用ツールの活用
真治 米田
PPTX
shinken monitoringについて真剣に調べてみた結果
Tsuyoshi Torii
PDF
Service worker が拓く mobile web の新しいかたち
Kinuko Yasuda
PDF
Ansible ネットワーク自動化チュートリアル (JANOG42)
akira6592
PPTX
20061122
小野 修司
PDF
Ansible handson ood2016
Hideki Saito
PDF
elasticsearchプラグイン入門
Shinsuke Sugaya
PDF
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
PDF
Mysql+Mroongaで全文検索
yoyamasaki
PDF
MailFluteでメール送信を楽しもう!
p1us2er0
PPTX
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
PDF
オンプレを少しずつコンテナ化する
Kenkichi Okazaki
PDF
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
PDF
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
Takeshi Kuramochi
PPTX
Zabbixを2分でインストール
真乙 九龍
PDF
Spring bootでweb 基本編
なべ
運用の現場での監視運用ツールの活用
真治 米田
shinken monitoringについて真剣に調べてみた結果
Tsuyoshi Torii
Service worker が拓く mobile web の新しいかたち
Kinuko Yasuda
Ansible ネットワーク自動化チュートリアル (JANOG42)
akira6592
20061122
小野 修司
Ansible handson ood2016
Hideki Saito
elasticsearchプラグイン入門
Shinsuke Sugaya
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
Yasutaka Hamada
Mysql+Mroongaで全文検索
yoyamasaki
MailFluteでメール送信を楽しもう!
p1us2er0
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
オンプレを少しずつコンテナ化する
Kenkichi Okazaki
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
Takeshi Kuramochi
Zabbixを2分でインストール
真乙 九龍
Spring bootでweb 基本編
なべ
Ad
Similar to iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
(20)
PDF
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
PDF
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Mori Tetsuya
PDF
Getting started with Handoff
Yuichi Yoshida
PDF
Weeyble async 181009_tukky
shotaueda3
PDF
iOS WebView App
hagino 3000
PPTX
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
PDF
5分でわかったつもりになるParse.com
Kenta Tsuji
PDF
TestFlight自動化でらくらくチームテスト
Yoichiro Sakurai
PDF
Using SockJS(Websocket) with Sencha Ext JS
Kazuhiro Kotsutsumi
PDF
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
PDF
CleanArchitecture with AssemblyDefinition in unity
NakanoYosuke1
PDF
Swift + JSON via WordPress
Masahiro Nakashima
PDF
Web socketドロンくん その後-
Yuuichi Akagawa
PDF
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
Shigeo Ueda
PPTX
Spring Integration 超入門
Yasutaka Sugamura
PDF
勉強会force#3 iOSアプリ開発
Kazuki Nakajima
PDF
プロキシーを使ってテストを楽にする
Shunji Konishi
PDF
Ios corebluetooth beginner
shinsuke79
PDF
Wolcome to swift
Kyohei Ito
PPTX
20120425
小野 修司
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
Unity に於ける iOS ビルド自動化のおはなし - 20141030 第26回 Unity 勉強会
Mori Tetsuya
Getting started with Handoff
Yuichi Yoshida
Weeyble async 181009_tukky
shotaueda3
iOS WebView App
hagino 3000
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
5分でわかったつもりになるParse.com
Kenta Tsuji
TestFlight自動化でらくらくチームテスト
Yoichiro Sakurai
Using SockJS(Websocket) with Sencha Ext JS
Kazuhiro Kotsutsumi
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
CleanArchitecture with AssemblyDefinition in unity
NakanoYosuke1
Swift + JSON via WordPress
Masahiro Nakashima
Web socketドロンくん その後-
Yuuichi Akagawa
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
Shigeo Ueda
Spring Integration 超入門
Yasutaka Sugamura
勉強会force#3 iOSアプリ開発
Kazuki Nakajima
プロキシーを使ってテストを楽にする
Shunji Konishi
Ios corebluetooth beginner
shinsuke79
Wolcome to swift
Kyohei Ito
20120425
小野 修司
Ad
More from 聡 大久保
(20)
PPTX
Oculus Interaction SDK で物をつかむ編
聡 大久保
PPTX
Oculus Interaction SDK でグラブまわりの設定方法
聡 大久保
PPTX
空間を認識する - 取り込みから表示まで -
聡 大久保
PPTX
Photon Fusionのはじめの一歩
聡 大久保
PPTX
Hololens2 MRTK2.7(OpenXR) でのビルド環境構築(環境設定からビルドまで)
聡 大久保
PPTX
Hololens2でアカウント情報の取得
聡 大久保
PPTX
HoloLens2とPCで、WebRTCで映像をやりとり
聡 大久保
PPTX
UnityでVRアプリ(Android Cardboard)を作る -準備編-
聡 大久保
PPTX
VRでのUI設計のヒント
聡 大久保
PPTX
ハードサーフェイスモデリング勉強会(Blender2.79b編)
聡 大久保
PPTX
Google Tangoで現実世界を感じてみよう
聡 大久保
PPTX
仮想マシンを仮想空間で見る Cloud roadshow
聡 大久保
PPT
AWSのEC2の複数インスタンスからファイルを共有する方法
聡 大久保
PPTX
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
聡 大久保
PPTX
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
聡 大久保
PPTX
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
聡 大久保
PPTX
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
聡 大久保
PPTX
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
聡 大久保
PPTX
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
聡 大久保
PPTX
awsを学ぶ上で必要となる前提知識(DB)
聡 大久保
Oculus Interaction SDK で物をつかむ編
聡 大久保
Oculus Interaction SDK でグラブまわりの設定方法
聡 大久保
空間を認識する - 取り込みから表示まで -
聡 大久保
Photon Fusionのはじめの一歩
聡 大久保
Hololens2 MRTK2.7(OpenXR) でのビルド環境構築(環境設定からビルドまで)
聡 大久保
Hololens2でアカウント情報の取得
聡 大久保
HoloLens2とPCで、WebRTCで映像をやりとり
聡 大久保
UnityでVRアプリ(Android Cardboard)を作る -準備編-
聡 大久保
VRでのUI設計のヒント
聡 大久保
ハードサーフェイスモデリング勉強会(Blender2.79b編)
聡 大久保
Google Tangoで現実世界を感じてみよう
聡 大久保
仮想マシンを仮想空間で見る Cloud roadshow
聡 大久保
AWSのEC2の複数インスタンスからファイルを共有する方法
聡 大久保
Awsで構築したのだよ 06 ec2インスタンス起動時にCloudWatchのアラームを追加する
聡 大久保
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
聡 大久保
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
聡 大久保
Awsで構築したのだよ 03 ec2インスタンスに設定したタグをサーバから取得
聡 大久保
Awsで構築したのだよ 02 ec2インスタンスから自分のインスタンスidを取得
聡 大久保
Awsで構築したのだよ 01 ユーザのコンソール操作をログに残す
聡 大久保
awsを学ぶ上で必要となる前提知識(DB)
聡 大久保
iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
1.
iOSハンズオントレーニング 通信(NSURLConnection/NSURLSession)編 大久保 聡
2.
目次 NSURLConnection(同期) NSURLConnection(非同期) NSURLSession ※ベースとなるプロジェクトをダウンロードしてください。 https:/ /github.com/ovjang/NoUseStoryBoard
3.
WebのAPIを叩いてみる Facebook、twitterなどで、サーバとのやりとりにWeb APIのI/F が提供されています。APIでやりとりを行い、結果をiOSアプリ で表示することができたら・・・・ 本ハンズオンでは、認証が無くユーザ登録だけで使える、ぐるな びWebサービスを使ってiOSからリクエストを投げて、レスポン スを受け取るところまでを、ハンズオンで実施します。 ユーザ登録が必要になります。手順は、ぐるなびWebサービスの ホームページをご覧ください。http:/ /api.gnavi.co.jp/api/use.html
4.
NSURLConnection(同期) リクエスト(NSURLRequest)を作成 NSURLConnectionでリクエストを発行する。 結果が返るまで、処理がブロックされます。 結果(NSURLResponse)を、受け取る。
5.
NSURLRequestの作成 レストラン検索APIで、freewordに”ワニ”、エリア を大阪(AREA120)で検索するためのリクエストを作 成します。 http:/ /api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=0520eb3010561b785d34a9af18e126a2&freeword=%E3%83%AF%E3%83%8B &area=AREA120 - (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. ! // 送信したいURLを作成する NSString *urlString =@"http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=0520eb3010561b785d34a9af18e126a2&freeWord=ワニ&area=AREA120"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; // Mutableなインスタンスを作成し、インスタンスの内容を変更できるようにする NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // MethodにGETを指定する。 request.HTTPMethod = @"GET"; }
6.
NSURLConnectionでリクエストを発行する。 NSURLConnectionで、先ほど作成したリクエストを 発行します。sendSynchronousRequestメソッドを使 うことで同期処理となり、レスポンスが返却され終 わるまで、処理がブロックされます。 - (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. ! // 送信したいURLを作成する NSString *urlString =@"http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=0520eb3010561b785d34a9af18e126a2&freeWord=ワニ&area=AREA120"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; // Mutableなインスタンスを作成し、インスタンスの内容を変更できるようにする NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // MethodにGETを指定する。 request.HTTPMethod = @"GET"; NSHTTPURLResponse *httpResponse; NSError *err; /* HTTP リクエスト送信 */ NSData *contents = [NSURLConnection sendSynchronousRequest:request returningResponse:&httpResponse error:&err]; NSString *responseBody = [[NSString alloc] initWithData:contents encoding:NSUTF8StringEncoding]; NSLog(@"Response = %@", responseBody); }
7.
動かしてみる
8.
NSURLConnection(非同期) リクエスト(NSURLRequest)を作成 NSURLConnectionでリクエストを発行する。 結果をDelegateで、受け取る。
9.
NSURLRequestの作成 同期処理と同じです。 - (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. !! // 送信したいURLを作成する NSString *urlString =@"http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=0520eb3010561b785d34a9af18e126a2&freeword=ワニ&area=AREA120"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; ! // Mutableなインスタンスを作成し、インスタンスの内容を変更できるようにする NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // MethodにGETを指定する。 ! request.HTTPMethod = @"GET"; } レスポンス受け取り用に、NSURLConnectionDelegateプロ トコルを継承しておきます。 // // // // Screen1ViewController.h NoUseStoryBoard ! #import <UIKit/UIKit.h> ! @interface Screen1ViewController : UIViewController <NSURLConnectionDelegate> ! @end
10.
NSURLConnectionでリクエストを発行する。 NSURLConnectionで、先ほど作成したリクエストを発行し ます。initWithRequestメソッドを使うことで非同期処理 となり、レスポンスが随時返却されます。 delegateで返されるレスポンスの処理を行います。 - didReceiveDataでレスポンス返却の都度、受け取ったレ スポンスを保管します。 - 全部のレスポンスが返されたら、 connectionDidFinishLoadingが呼ばれます。
11.
レスポンス受け取り用に、 NSURLConnectionDelegateプロトコルを継承してお きます。 データ受け取り用のメンバ変数を用意します。 // // // // Screen1ViewController.h NoUseStoryBoard ! #import <UIKit/UIKit.h> ! @interface Screen1ViewController
: UIViewController <NSURLConnectionDelegate> { @private NSMutableData *mutableData; } ! @end
12.
レスポンス受け取り用のメンバ変数の初期化。 NSURLConnectionのinitWithRequestメソッドで、リクエ ストを発行します。 - (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. ! // 受信データ用 mutableData = [NSMutableData new]; // 送信したいURLを作成する NSString *urlString =@"http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=0520eb3010561b785d34a9af18e126a2&freeword=ワニ&area=AREA120"; urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; // Mutableなインスタンスを作成し、インスタンスの内容を変更できるようにする NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // MethodにGETを指定する。 request.HTTPMethod = @"GET"; /* HTTP リクエスト送信 */ NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if (!connection) NSLog(@"failed to create connection"); } ! // データ受信時 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [mutableData appendData:data]; } ! // 完了時 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString *str= [[NSString alloc] initWithData:mutableData encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); }
13.
動かしてみる
14.
NSURLSession HTTPを介してコンテンツをダウンロードするAPI iOS7以上で利用可能 設定を一箇所にまとめて記述可能 バックグラウンド(アプリが後ろに回っても)で アップロード、ダウンロード可能
15.
基本 NSURLSessionConfiguration 接続の設定 (Cookie、Cache、HTTPヘッダー、認証、PROXYなど接続に関係する設定をまとめて設定できる。) ↓ NSURLSession 接続の管理(通信処理のキュー) ↓ NSURLSessionTask リクエスト + NSURLSessionDelegate リクエストの結果を処理
16.
NSURLSession作成 // // // // Screen1ViewController.h NoUseStoryBoard ! #import <UIKit/UIKit.h> ! @interface Screen1ViewController
: UIViewController <NSURLSessionTaskDelegate> ! @end - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // defaultSessionConfiguration or backgroundSessionConfiguration NSURLSessionConfiguration *configration = [NSURLSessionConfiguration defaultSessionConfiguration]; // NSURLSessionConfigurationを指定して NSURLSession作成 NSURLSession *session = [NSURLSession sessionWithConfiguration:configration delegate:self delegateQueue:nil]; }
17.
NSURLSessionTaskとDelegate タスク NSURLSessionTask 説明 基底クラス バックグラウンド 対応Delegate - NSDataオブジェクトを使用してデータを送受信 します。データタスクは、多 くの場合はインタ ラクティブな、アプリケーションからサーバへの NSURLSessionDataTask 短いリクエストを対象として います。データタ スクは、データの各部分が受信された後に一度に × NSURLSessionTaskDelegate 一部分ずつ、または完了ハンドラによって一括し て、アプリケーションにデータを返すことができ ます。 NSURLSessionUploadTask NSURLSessionDownloadTask ダウンロードタスク
は、ファイルの形でデータ を受信する。 アップロードタスクは は、(通常はファイルの形 で)データを送信する。 ○ ○ NSURLSessionTaskDelegate NSURLSessionDownloadTaskD elegate
18.
NSURLSessionDataTask作成 - (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. // defaultSessionConfiguration or backgroundSessionConfiguration NSURLSessionConfiguration *configration = [NSURLSessionConfiguration defaultSessionConfiguration]; // NSURLSessionConfigurationを指定して NSURLSession作成 NSURLSession *session = [NSURLSession sessionWithConfiguration:configration delegate:self delegateQueue:nil]; // リクエスト作成 NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]; // 先に作成したNSURLSessionに対して dataTaskWithRequest: メソッドを呼び出す NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request]; // resumeで処理開始 [dataTask resume]; }
19.
NSURLSessionTaskDelegeteの実装 // // // // Screen1ViewController.h NoUseStoryBoard ! #import <UIKit/UIKit.h> ! @interface Screen1ViewController
: UIViewController <NSURLSessionTaskDelegate> { @private NSMutableData *mutableData; } ! @end
20.
- (void)viewDidLoad { [super viewDidLoad]; //
Do any additional setup after loading the view. // 受信データ用 ! mutableData = [NSMutableData new]; // defaultSessionConfiguration or backgroundSessionConfiguration NSURLSessionConfiguration *configration = [NSURLSessionConfiguration defaultSessionConfiguration]; // NSURLSessionConfigurationを指定して NSURLSession作成 NSURLSession *session = [NSURLSession sessionWithConfiguration:configration delegate:self delegateQueue:nil]; // リクエスト作成 NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]; // 先に作成したNSURLSessionに対して dataTaskWithRequest: メソッドを呼び出す NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request]; // resumeで処理開始 [dataTask resume]; } ! // データ受信時 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { [mutableData appendData:data]; } ! // 完了時 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if(error){ // エラーハンドリング }else{ NSString *str= [[NSString alloc] initWithData:mutableData encoding:NSShiftJISStringEncoding]; NSLog(@"%@",str); } }
21.
動かしてみる
Download