【kotlin】DropBoxAPIを使用して一覧を取得

概要

DropBoxAPIを使用して、一覧を取得します。

開発環境

  1. Mac OS 13.2
  2. Android studio 2021.2.1 Patch 2

DropBoxの認証画面を表示して認証します。

binding.buttonSign.setOnClickListener {
    this.context?.let { it1 ->
        // ブラウザで認証画面が開きます。
        Auth.startOAuth2Authentication(it1, {drop_box_app_key})
    }
}
  • 以下の画面が表示されます。そのまま画面に従って進みます。

  • Allow(許可)をタップするとアプリに戻ります。

  • アプリに戻ったらtokenが取れます。他の画面でも使用するならSharedPreferencesに保存しても良いでしょう
override fun onResume() {
    super.onResume()
    // Tokenが取得できます。
    val newToken = Auth.getOAuth2Token().toString()
}
  • 一覧の取得です。
private suspend fun getDropBoxListTask(token: String?) {
    try {
        // tokenがない場合処理をやめます。
        if (token == null) {
            return
        }
        // 
        val config = DbxRequestConfig("Name/Version")
        // tokenを設定します。
        val client = DbxClientV2(config, token)
        // 一覧を取得します。liatFolderには取得したいPathを入れます。
        // ここでは、一番上(root)を指定しています。
        val resultList = client.files().listFolder("").entries
        withContext(Dispatchers.Main) {
            for (metadata in resultList) {
                // metadataから値を取得できます。
                metadata.name // ファイル名もしくはフォルダ名
                metadata.toString() // このファイルに対してのjsonが取れます。
            }
        }
        withContext(Dispatchers.Main) {
            // ここでUIの更新を行います。
        }
    } catch (e: Exception) {
        // エラー処理
    }
}

【kotlin】DropBoxのAPIを使用する。

概要

kotlinでDropBoxAPIを使用するための事前設定です。

開発環境

  1. Mac OS 13.2
  2. Android studio 2021.2.1 Patch 2

DropBoxAPIを使用する準備

  • DropBoxDeveloperでappを作成

以下のページのcreate appボタンからappを開始します。
https://www.dropbox.com/developers/apps

以下の内容を入力しcreate appボタンで作成されます。

作成されたらapp keyをメモしておきましょう。
後で使用します。

AndroidProjectの設定

  • DoropBoxのライブラリを追加

build.gradle(:app)に追加します。

dependencies {
    implementation 'com.dropbox.core:dropbox-core-sdk:5.4.4'
}
  • AndroidManifest.xmlの編集

以下のpermissionを追加します。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

以下の認証用のActivityを追加します。

<activity
    android:name="com.dropbox.core.android.AuthActivity"
    android:configChanges="orientation|keyboard"
    android:launchMode="singleTask"
    android:exported="true">
    <intent-filter>
        <data android:scheme="db-{dropboxのappKey}"/>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

【swift】DropBoxAPIを使用して一覧を取得

概要

DropBoxAPIを使用して、一覧を取得します。

開発環境

  1. Mac OS 13.2
  2. Xcode 14.0

認証画面を表示

  • DropBoxの認証画面を表示して認証します。
@IBAction private func moveSignIn(_ sender: Any) {
    // 認証されているかを判定します。
    guard DropboxClientsManager.authorizedClient != nil else {
        // 認証されていない場合、DropBoxの認証をします。
        signInDropbox()
        return
    }
}

private func signInDropbox() {
    let scopeRequest = ScopeRequest(scopeType: .user,
                                    // 表示する権限です。DropBoxDeveloperConsoleでチェックしたものを指定します。
                                    scopes: ["files.metadata.write",
                                             "files.content.write"],
                                    includeGrantedScopes: false)
    DropboxClientsManager.authorizeFromControllerV2(
        UIApplication.shared,
        controller: self,
        loadingStatusDelegate: nil,
        openURL: { (url: URL) -> Void in UIApplication.shared.open(url) },
        scopeRequest: scopeRequest
    )
}
  • 実行すると認証画面が表示されます。

  • 進めていくとDropBoxを使用するかどうかの画面が表示されます。
  • Allowを押下すると呼び出し画面へ戻ります。


一覧の取得

private func getList() {
    // 認証があるか確認してDropboxClientを取得します。
    guard let dropboxClient = DropboxClientsManager.authorizedClient else {
        return
    }
    // 指定したパスのファイル情報を取得します。
    // この場合は一番上を指定してます。
    let listFolders = dropboxClient.files.listFolder(path: "")
    listFolders.response { response, error in
        guard let result = response else {
            return
        }
        for entry in result.entries {
            // 格納されているFile情報が取れます。
            if let file = entry as? SwiftyDropbox.Files.FileMetadata {
                file.name // ファイル名
                file.size // ファイルサイズ
                file.pathDisplay // ファイルパス
                // その他ファイル情報が取れます。
            } else if let folder = entry as? SwiftyDropbox.Files.FolderMetadata {
                folder.name // フォルダ名
                folder.pathDisplay // フォルダパス
                // その他フォルダ情報が取れます。
            }
        }
    }
}

【swift】DropBoxのAPIを使用する。

概要

swiftでDropBoxAPIを使用するための事前設定です。

開発環境

  1. Mac OS 13.2
  2. Xcode 14.0

DropBoxAPIを使用する準備

  • DropBoxDeveloperでappを作成

以下のページのcreate appボタンからappを開始します。
https://www.dropbox.com/developers/apps

以下の内容を入力しcreate appボタンで作成されます。

作成されたらapp keyをメモしておきましょう。
後で使用します。

Xcode設定

  • Info.plistの編集

赤枠の値を入れてください
app keyもここで設定します。

  • PodsでDoropBoxのライブラリを追加します。

Podfileには以下を設定します。

target 'プロジェクト名' do
  use_frameworks!
  pod 'SwiftyDropbox'
end

pod installをします。
Alamofireも一緒に入りました。

>pod install

Analyzing dependencies
Downloading dependencies
Installing Alamofire (5.4.4)
Installing SwiftyDropbox (9.1.0)
Generating Pods project
Integrating client project
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.

【swift】日付の計算方法

概要

日付の計算をします。

開発環境

  1. Mac OS 13.1
  2. Xcode 14.0
/// 日付のいずれかの要素を加減算する
/// - prameter component: 年月日等何を加減算するのか
/// - prameter value: 加減算量
/// - return 加減算後の日付
private func calculateDate(component: Calendar.Component, value: Int) -> Date? {
    let date = Date()
    let afterDate = Calendar.current.date(byAdding: component, value: value, to: date)

    rreturn afterDate
}
// 現在日付から5日後の日付を取得する。
let afterDate = calculateDate(component: .day, value: 5)

print("現在日付:",Date())
print("計算結果:",afterDate!)
現在日付: 2023-01-24 07:56:03 +0000
計算結果: 2023-01-29 07:56:03 +0000

Calendar.Componentに何を設定したら良いか

Calendar.Component 内容
.year 年の加減算ができる
.month 月の加減算ができる
.day 日の加減算ができる
.weekday .dayと同様の挙動
.weekOfYear 週の加減算ができる。 (valueを1にすると1週間後の日付が戻る)
.weekOfMonth .weekOfYearと同様の挙動
.hour 時の加減算ができる
.minute 分の加減算ができる
.second 秒の加減算ができる

【swift】UIViewにグラデーションを付ける。

概要

UIViewを使ってカラーグラデーションを表現します。
作成したレイヤーをサブレイヤーとして追加します。

開発環境

  1. Mac OS 13.1
  2. Xcode 14.0
private func gradient(view: UIView) {
    // CAGradientLayerのオブジェクトのインスタンスを取得します。
    let layer: CAGradientLayer = CAGradientLayer()
    // グラデーションする。2色を指定します。
    let background1 = UIColor.lightText
    let background2 = UIColor.brown
    // レイヤーの範囲を指定します。
    layer.frame.size = CGSize(width: view.bounds.maxX, height: 100)
    // レイヤーに色を指定します。
    layer.colors = [background1.withAlphaComponent(1.0).cgColor,
                 background2.withAlphaComponent(1.0).cgColor]
    // レイヤーの開始位置を指定します。
    layer.startPoint = CGPoint(x: 0.0, y: 0.0)
    // レイヤーの終了位置を指定します。
    layer.endPoint = CGPoint(x: 1.0, y: 0.0)
    view.layer.addSublayer(layer)
}

【swift】UIViewを使って破線を表示する。

概要

UIViewを使って破線を表現します。
作成した破線レイヤーをサブレイヤーとして追加します。

開発環境

  1. Mac OS 13.1
  2. Xcode 14.0
func drawDottedLine(view: UIView) {
  // CAShapeLayerのオブジェクトのインスタンスを取得します。
  let sharpeLayer: CAShapeLayer = CAShapeLayer()
  // 波線に色を付けます。
  sharpeLayer.strokeColor = UIColor.lightGray.cgColor
  // 厚さを設定します。
  sharpeLayer.lineWidth = 1
  // 波線のピッチを設定します。
  sharpeLayer.lineDashPattern = [4, 4]

  // 追加するレイヤーの範囲を設定します。
  let path: CGMutablePath = CGMutablePath()
  path.addLines(between: [CGPoint(x: view.bounds.minX, y: view.bounds.minY) ,
     CGPoint(x: view.bounds.maxX, y: view.bounds.maxY)])
  sharpeLayer.path = path

  view.layer.addSublayer(sharpeLayer)
}