Google+ もご覧ください
ユーザーアイコン

作って学ぶSDKの使い方

Dropbox Sync API SDKでiOSアプリからログインするデモ&コード

Hirobe

Dropbox Sync API SDKでiOSアプリからログインするデモ&コード

プロジェクトの作成とCocoaPods

まず、プロジェクトを作成します。

Xcodeを起動して、File->New->ProjectでiOSのApplicationからEmpty Applicationを選択します。

  • Project Name : SyncMemoring
  • ClassPrefix : SM
  • Use Core Data : チェックしない

とします。

プロジェクト名は、Dropboxに申請する際に登録した名前を使用してください。ここはSyncMemoringとしていますが、申請した名前に読み替えてください。

Xcodeでプロジェクト作成
Xcodeでプロジェクト作成

CocoaPods

幸いなことに、CocoaPodsにSync APIのSDKが登録されているので、CocoaPodsを使います。CocoaPodsはObjective-C用の様々なライブラリを簡単にプロジェクトに組み込むためのサービスです。

CocoaPodsがインストールされてない場合は、インストールを済ませておいてください。ここではCocoaPods自体の説明は省略します。

プロジェクトファイルと同じフォルダにPodfileというテキストファイルを作成し、以下のように記載してください。今回は、Dropbox Sync APIに加えて、MBProgressHUDも利用します。MBProguressHUDは、通信中に回転するインジケータを表示するために利用します。

platform :ios

pod "Dropbox-Sync-API-SDK"
pod "MBProgressHUD"

Podfileをインストールします。Xcodeでこのプロジェクトを開いている場合は、いったん閉じてください。

シェルを開いて、Podfileのあるフォルダに移動し、以下のコマンドを実行してください。同じフォルダに、プロジェクト名.xcworkspaceというファイルが生成されていれば、成功です。今後は、プロジェクト名.xcodeprojではなく、プロジェクト名.xcworkspaceをXcodeで開いて作業を行うことになります。

$ pod install

以下のようなファイルが作成されます。

pod install後のファイル
pod install後のファイル

プロジェクト名.xcworkspaceをXcodeで開くと、以下のように表示されます。

Xcodeで開いたワークスペース
Xcodeで開いたワークスペース

ちなみに、今回はCocoaPodsを利用していますが、オリジナルのSDKはDropbox Developerのサイトからダウンロードできます

オリジナルのSDKにはサンプルコードが含まれています。CocoaPodsは便利ですが、ビルドに必要な最低限のファイルしか含まれていません。必ずオリジナルのSDKも入手するようにしましょう。

ファイルを追加

プロジェクトで使うファイルを先に追加しておきます。ここで追加するのは、ファイルのリストを表示したりアプリのルートビューコントローラーとなるSMFilesViewControllerと、テキストの編集画面となるSMEditorViewControllerです。

ナビゲーションバーからSyncMemoringを選択してポップアップメニューからNew Fileを選択し、 Objective-C class選択し、以下のクラスを作成します。UITableViewControllerのサブクラスとして作成してください。

  • Class : SMFilesViewController
  • Subclass of : UITableViewController

続けて、同じ手順で以下のクラスを作成します。今度はUIViewControllerのサブクラスです。

  • Class : SMEditorViewController
  • Subclass of : UIViewController

以下のようにSMFilesViewController.hとSMFilesViewCotroller.m、SMEditerViewContoller.h、SMEditorViewController.mができていればOKです。

4つのファイルを追加
4つのファイルを追加

Dropboxを使うために

まず、プロジェクト名-Info.plistを開いて、以下の項目を追加しましょう。 - Information Property Listの下にURL typesを追加 - URL types/Item 0の下にURL Schemesを追加 - URL Schemes/Item 0に"db-APIキー値"を値として入力

例えばAPIキーがabcだった場合、db-abcと入力します。

Info.plistの編集
Info.plistの編集

Dropboxへリンク(ログイン)する機能

アプリに、Dropboxへリンク(ログイン)する機能を付けましょう。Linkボタンを押したら、Dropboxへログインする画面を表示するようにします。

SMAppDelegete.m

SMAppDelegete.mを以下のように編集します。

まず、冒頭部を以下のように変更します。

  • SMFilesViewControllerのヘッダをインクルードします。
  • Dropboxのヘッダをインクルードします。
  • APP KeyとAPP Secretを定義しておきます。それぞれ、Dropboxのサイトで登録時に表示される値に書き換えてください。
#import "SMAppDelegate.h"
#import "SMFilesViewController.h"
#import <Dropbox/Dropbox.h>

#define DROPBOX_APP_KEY @"Your APP_KEY"
#define DROPBOX_APP_SECRET @"Your APP_SECRET"

続けて、起動時に呼ばれるapplication:didFinishLaunchingWithOptions:を書き換えます。 ここでは、以下の処理を行います。

  • DBAccountManagerを生成しAPP Key,APP Secretを登録する
  • 過去の起動時にDropboxへのリンクが済んでいれば、それを元にDBFilesystemを生成する
  • SMFilesViewControllerをルートビューコントローラーとして表示する
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    DBAccountManager* accountMgr =
    [[DBAccountManager alloc] initWithAppKey:DROPBOX_APP_KEY
                                      secret:DROPBOX_APP_SECRET];
    [DBAccountManager setSharedManager:accountMgr];

    DBAccount *account = [DBAccountManager sharedManager].linkedAccount;
    if (account) {
        DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account];
        [DBFilesystem setSharedFilesystem:filesystem];
    }

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    SMFilesViewController *controller =
        [[SMFilesViewController alloc] initWithStyle:UITableViewStylePlain];
    UINavigationController *navController =
        [[UINavigationController alloc] initWithRootViewController:controller];
    self.window.rootViewController = navController;
    [self.window makeKeyAndVisible];
    return YES;
}

つづけて、application:openURL:sourceApplication:annotation:メソッドを追加します。 これは、ユーザがDropboxへリンク(ログイン)した後にコールバックとして呼ばれることになります。 アカウントを元にDBFilesystemを生成し、保存します。

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
  sourceApplication:(NSString *)source annotation:(id)annotation {
    DBAccount *account = [[DBAccountManager sharedManager] handleOpenURL:url];
    if (account) {
        NSLog(@"App linked successfully!");

        if ((account)&&(![DBFilesystem sharedFilesystem])) {
            DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account];
            [DBFilesystem setSharedFilesystem:filesystem];
        }
        return YES;
    }
    return YES;
}

SMFilesViewCotntroller.m

さらに、SMFilesViewController.mを以下のように編集します。

冒頭部分を以下のように変更します。

#import "SMFilesViewController.h"
#import <Dropbox/Dropbox.h>

viewDidLoadを以下のように変更します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *linkButton =
        [[UIBarButtonItem alloc] initWithTitle:@"Link"
                                         style:UIBarButtonItemStyleBordered
                                        target:self
                                        action:@selector(linkButtonTapped:)];
    self.navigationItem.rightBarButtonItem = linkButton;
}

linkButtonTapped:を追加します。

- (IBAction)linkButtonTapped:(id)sender {
    [[DBAccountManager sharedManager] linkFromController:self];
}

これをビルドし、実行してみましょう。

起動した画面
起動した画面

右上に、Linkボタンが表示されます。これを押すと、以下のようなDropboxへのログイン画面が表示されます。

Dropboxへのログイン画面
Dropboxへのログイン画面

2段階認証が有効な場合
2段階認証が有効な場合

Xcodeのログ
Xcodeのログ

ここで、Dropboxのアカウントを入力して1ログインすると、Dropboxにアプリフォルダが生成されます。なお、2段階認証を有効にしている場合は、セキュリティコード入力画面が表示されます。実際のフォルダは、Dropboxのルートフォルダ直下のアプリフォルダの下に作成されます。

Dropboxのイベントをみると、アプリフォルダが作成されたことが分かります。Finderでも同様に確認が可能です。

Dropboxのイベント
Dropboxのイベント


これでDropboxへの接続ができました。次回はファイルの一覧を表示します。


  1. ログインできるのは、Dropbox Developerのサイトでアプリを登録したアカウントのみです。設定画面でアカウントを(100件まで)追加することができます。すべてのユーザが使えるようにするには、Dropboxに審査が必要です。 

Sdk
タグ:

記事をリクエストする

関連記事

コメント