フォトシェア

このチュートリアルでは、フォトシェアについて学びます。 command.cgiフォトシェアモードの有効化フォトシェアモードの解除 を使用します。 このチュートリアルは別項の iOS Tutorial 7: FlashAirへのアップロード に基づいています。**


概要

フォトシェアとは、FlashAirの指定したフォルダと日付の画像だけを、公開できるようにする機能です。

メモ: フォトシェアを行う際には、フォトシェア専用のSSIDに変更することをおすすめします。 フォトシェアを解除した瞬間に全ての画像の閲覧が可能になりますが、直後に元のSSIDに戻すことで、強制的に共有状態を解除するためです。 SSIDの変更の詳細は iOS Tutorial 6: SSIDとパスワードの変更 を参考にしてください。


画面レイアウトの作成

レイアウトはこのように作ります。

(レイアウト)

iOS Tutorial 7: FlashAirへのアップロード に、画面5:フォトシェア実行中画面を追加します。

画面4:操作画面に PhotoShare ボタンを追加します。

PhotoShare ボタンがタップされると画面5:フォトシェア実行中画面を表示します。


コードの作成

画面4:操作画面の作成

iOS Tutorial 7: FlashAirへのアップロードの状態に、PhotoShare ボタンをタップした際の処理を追加します。

フォトシェアの有効化

フォトシェアを行うためには、以下のコマンドを使用します。

  • フォトシェアは、command.cgiop=200とフォルダパス、日付を指定することで設定できます。
    • コマンド: http://flashair/command.cgi?op=200&DIR=/DCIM/100__TSB&DATE=17153
    • コマンドが返す情報:
      • OK フォトシェアの有効化に成功
      • 400 Bad Request フォトシェアの有効化に失敗

では、フォトシェアを設定します。

FSMemoEditViewController.m (1)
    - (IBAction) photoshareButton:(id)sender {
        NSError *error = nil;

        // Set photoshare
        // Make url
        NSString *urlStr = [@"http://flashair/command.cgi?op=200&DIR="
                                                             stringByAppendingString:self.path ];
        urlStr = [urlStr stringByAppendingString:@"&DATE="];
        urlStr = [urlStr stringByAppendingString: [self getDate16: self.date]];
        NSURL *url = [NSURL URLWithString:urlStr];
        //Run cgi
        NSString *rtnStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding
                                                                                     error:&error];
        if ([error.domain isEqualToString:NSCocoaErrorDomain]) {
            NSLog(@"command.cgi %@\n", error);
        } else {
            if ([rtnStr isEqualToString:@"OK"]) {
                // Segue
                [self performSegueWithIdentifier:@"toPhotoshare" sender:self];
            } else {
                NSLog(@"%@", rtnStr);
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PhotoShare" message:@"
                   command.cgi failed" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
                [alert show];
                return;
            }
        }
    }
  • 6-13行目
    フォトシェアを設定しています。

  • 17-19行目
    フォトシェアを設定した結果が成功であった場合は、フォトシェア実行中画面へ遷移するように設定しています。

FSMemoEditViewController.m (2)
    - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Pass next View the Data
        if ([segue.identifier isEqualToString:@"toImageView"]) {
            FSImageViewController *imageViewController = segue.destinationViewController;
            imageViewController.fileInfo = rowdata;
        }
        if ([segue.identifier isEqualToString:@"toPhotoshare"]) {
            FSPhotoShareViewController *photoShareViewController = segue.destinationViewController;
            photoShareViewController.path = [self.path stringByAppendingString:@"/"];
            photoShareViewController.date = self.date;
        }
    }
  • 7-11行目
    フォトシェア実行中画面に、現在対象となっているフォルダと日付を渡します。

画面5:フォトシェア実行中画面の作成

フォトシェア設定後に遷移する画面を作成します。 Back ボタン がタップされた際には、メッセージを表示した後、フォトシェアを解除します。

フォトシェア解除

フォトシェアの解除を行うためには、以下のコマンドを使用します。

  • フォトシェアは、command.cgiop=201を指定することで解除できます。
    • コマンド: http://flashair/command.cgi?op=201
    • コマンドが返す情報:
      • OK フォトシェアの解除に成功
      • 400 Bad Request フォトシェアの解除に失敗
FSPhotoShareViewController.m(1)
    - (IBAction)backButton:(id)sender {
        // back button was pressed.
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PhotoShare" message:
            @"Do you disable PhotoShare?" delegate:self cancelButtonTitle:@"Cancel"
                                                     otherButtonTitles:@"OK", nil];
        [alert show];
    }

    - (void) disablePhotoShare {
        // Disable photoshare
        // Make url
        NSError *error;
        NSString *urlStr = @"http://flashair/command.cgi?op=201";
        NSURL *url = [NSURL URLWithString:urlStr];
        //Run cgi
        NSString *rtnStr = [NSString stringWithContentsOfURL:url encoding:
                                                NSUTF8StringEncoding error:&error];
        if ([error.domain isEqualToString:NSCocoaErrorDomain]) {
            NSLog(@"command.cgi %@\n", error);
        } else {
            if ([rtnStr isEqualToString:@"OK"]) {
                [self.navigationController popViewControllerAnimated:YES];
            } else {
                NSLog(@"%@", rtnStr);
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"PhotoShare" 
                    message:@"command.cgi failed" delegate:nil cancelButtonTitle:nil
                                                     otherButtonTitles:@"OK", nil];
                [alert show];
                return;
            }
        }
    }

    -(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        switch (buttonIndex) {
            case 1:
                [self disablePhotoShare];
                break;
            default:
                break;
        }
    }
  • 13-17行目
    フォトシェアを解除しています。

  • 21-22行目
    フォトシェアを解除した結果が成功であった場合は、前の画面へ戻します。


実行結果

フォトシェアを設定してみます。

その前に、フォトシェアを解除しておきます。

(This image shows the result)

Date List ボタンをタップします。

(This image shows the result)

2013/03/03を選択してみます。

(This image shows the result)

PhotoShare ボタンをタップし、フォトシェアを設定します。

(This image shows the result)

成功し、フォトシェア実行中画面に遷移しました。

(This image shows the result)

フォトシェアが設定されているか、確認してみます。 指定したフォルダと日付の画像だけが表示されました。

(This image shows the result)


サンプルコード

ios_tutorial_08.zip (63KB)

このサイトのサンプルコードは二条項BSDライセンスで提供されています。