ページ 11

iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月24日(木) 10:04
by shoshinsha
お世話になっております。

iPhoneアプリ開発において、タッチメソッドにおいて取得した座標情報や時間情報を配列に格納しアプリ外で保存するということをおこなっているのですが、方針としましては、

アプリ(タッチメソッド)で情報取得→GETかPOSTメソッドをサーバー側へ送信→サーバー側ではWebサーバーソフトのApacheを稼働させPHP言語にてデータベースへアクセス
するプログラムを記述→なおデータベースにはMySQLを使用→タッチメソッドっで取得した情報(配列やfloat型の値)をデータベースに保存。

という流れにしようかと思っているのですが何か不都合な点や間違っている点、足りない点などあるでしょうか?
通信プロトコルはHTTPを選択したのですが不都合はないのでしょうか?

また、サーバー側といっても今はMacbookにxamppをインストールしMacbook自体をサーバーとしている状態です。 後々は大学側のサーバーを借りるつもりです。

初心者なため意味がわからない部分があるかもしれないですがご返答お待ちしております。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月24日(木) 14:09
by h2so5
そのMacBookに外部からの接続が可能かどうかが問題です。
ファイアーウォールやルーターによって外部からの接続が遮断されている場合があるので。
さらに、回線のIPアドレスが変動する場合はDynamic DNSなどを利用する必要があります。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月24日(木) 17:19
by softya(ソフト屋)
wifiローカルでの通信なら、それで出来ると思います。
ただ、ユーザー識別の方法が検討されていませんね。
あと通信時間の事も考えるとタッチメソッドで通信したらが画面が凍ることはないんだろうか?って気もします。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月27日(日) 02:06
by shoshinsha
ご返信遅れました。 お二方アドバイスありがとうございます。

現在わからないことがあるのですが、

コード:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // タッチした座標を取得。
    CGPoint currentPoint = [[touches anyObject] locationInView:self.cavas];
    
    date = [NSDate date];
   
    // ボタン上の場合は処理を終了
    if (CGRectContainsPoint(self.clear.frame, currentPoint)
        || CGRectContainsPoint(self.regi.frame,currentPoint)){
        return;
    }
    
    if(currentPoint.y < 0 || currentPoint.y > 140){
        return;
    }
    
    // パスを初期化。
    bezierPath = [UIBezierPath bezierPath];
    bezierPath.lineCapStyle = kCGLineCapRound;
    bezierPath.lineWidth = 1.0;
   [bezierPath moveToPoint:currentPoint];
    
    currentPoint = [[touches anyObject]locationInView:self.cavas];
    NSLog(@"touchesBegan:(%.0f, %.0f)", currentPoint.x, currentPoint.y);
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    // タッチ開始時にパスを初期化していない場合は処理を終了。
    if (bezierPath == nil){
        return;
    }
    
    // タッチした座標を取得。
    CGPoint currentPoint = [[touches anyObject] locationInView:self.cavas];
    
    if(currentPoint.y < 0 || currentPoint.y >140){
        return;
    }
    
    // パスにポイントを追加。
    [bezierPath addLineToPoint:currentPoint];
    
    // 線を描画。
    [self drawLine:bezierPath];
    
    currentPoint = [[touches anyObject]locationInView:self.cavas];
    NSLog(@"touchesMoved:(%.0f,%.0f)", currentPoint.x,currentPoint.y);
}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    // タッチ開始時にパスを初期化していない場合は処理を終了。
    if (bezierPath == nil){
        return;
    }
    
    // タッチした座標を取得。
    CGPoint currentPoint = [[touches anyObject] locationInView:self.cavas];
    
    if(currentPoint.y < 0 || currentPoint.y > 140){
        return;
    }
    
    // パスにポイントを追加。
    [bezierPath addLineToPoint:currentPoint];
    
    // 線を描画。
    [self drawLine:bezierPath];
    
    // 今回描画した画像を保持。
    lastDrawImage = self.cavas.image;
    
    // パスを保持。
    [Stack addObject:bezierPath];
    bezierPath = nil;
    
    self.regi.enabled = YES;
    
    currentPoint = [[touches anyObject]locationInView:self.cavas];
    NSLog(@"touchesEnded:(%.0f,%.0f)", currentPoint.x,currentPoint.y);
    
    NSInteger size = [Stack count];
    
    [kakusuu1 addObject:[NSNumber numberWithInt:size]];
    NSLog(@"%@",kakusuu1);
    
    
    NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:date];
    
    [ontabtime addObject:[NSNumber numberWithFloat:interval]];
    NSLog(@"%@",ontabtime);
    
}

- (IBAction)regiP:(id)sender {
    
  ここで画数とタッチ開始からタッチ終わりまでの秒数をサーバーに送りたい。   

}
上記のプログラムでタッチ開始からタッチ終わりまでの秒数と総画数を取得できるのですが、最後のregiPで取得した画数(kakusuu1)、秒数(ontabtime)をサーバーからデータベースに保存したいのですが、、(kakusuu1とontabtimeはMutableArray型です)


ここでget かpost メソッドを使うと思うのですが、どのように記述すればいいのか調べたのですがよくわかりません。
どなたか教えてくれると助かります。。

ご返答お待ちしております。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月27日(日) 02:13
by shoshinsha
補足で

>>ここでget かpost メソッドを使うと思うのですが、どのように記述すればいいのか調べたのですがよくわかりません。
どなたか教えてくれると助かります。。

これはregiPを押した際にサーバーからデータベースに保存したいということでした。。

サーバーへ通信するNSURLなどを書く場所や配列をサーバーに送る為の書き方がわからないのでアドバイスもらえるとうれしいです、、

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月27日(日) 12:25
by softya(ソフト屋)
iPhoneの仕様は分からないので、送信の仕方だけ。

文字列に変換してgetだとURLに記述します。
これは、PHPなどのWEBアプリの勉強していけばしていけば分かると思います。HTMLのフォームから送信するものを真似ればよいだけです。
配列もname[0]=1234などの形で文字列にして送信できます。

※ 先にWEBアプリの勉強をおすすめします。iPhoneのC系とデータの扱いが全然違うのでこちらを理解しないと最適な送信方法が見えてこないと思います。それに合わせてiPhone側の送信を作るのです。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月28日(月) 02:19
by shoshinsha
ご返信ありがとうございます。

Webアプリの勉強もしていきます。。。

もう一つ質問なのですが、セキュリティ上、apache(Xampp)にパスワードをかけた方がいいとなっていたのでパスワードをかけたのですが、apacheにxcodeのシュミレーターやiphone,他のパソコンからアクセスする際はWebサーバー(http://localhost macの場合の)にどのようにアクセスするようにプログラム記述するのでしょうか?

初歩的な質問で申し訳ありません。 ご返答お待ちしております

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月28日(月) 11:02
by softya(ソフト屋)
先にも書いた通り、普通にWEBアプリを書いて下さい。HTMLを返すんじゃなくて文字列を返せばよいだけです。

【補足】
この間から同じ質問で進んでいないんでとりあえずやってみて下さい。なにもやらないと分からないです。

あとパスワードが何のことか分からないのでコメント出来ません。BASIC認証のこと?でしょうか。
ユーザー認証やBASIC認証やSSL認証も研修室のサーバー管理者と相談してください。勝手なことは出来ないはずです。
ローカルで研究室で出来ないことを実験しても意味がありません。

※ こういうのって半年とか時間を取って実験しつつ組み込んでいくものですが時間がないんですよね?
研究室での相談があまりに出来ていないので無茶かもしれないと思い始めました。

Re: iPhoneアプリ開発。サーバー、データベース通信について

Posted: 2013年10月31日(木) 02:28
by shoshinsha
 ご返信遅れました。

softyaさんご返答ありがとうございます。

無事にxode側もサーバー側もプログラムをかけているところです。 いろいろと初歩的な質問すいませんでした。

またお世話になるかと思いますのでよろしくお願いします。