【kotlin】DropBoxAPIを使用して一覧を取得
概要
DropBoxAPIを使用して、一覧を取得します。
開発環境
- Mac OS 13.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を使用する。
開発環境
- Mac OS 13.2
- Android studio 2021.2.1 Patch 2
DropBoxでAPIを使用する準備
- 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を使用して、一覧を取得します。
認証画面を表示
- 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を使用する。
DropBoxでAPIを使用する準備
- 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】日付の計算方法
概要
日付の計算をします。
開発環境
/// 日付のいずれかの要素を加減算する /// - 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を使ってカラーグラデーションを表現します。
作成したレイヤーをサブレイヤーとして追加します。
開発環境
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を使って破線を表現します。
作成した破線レイヤーをサブレイヤーとして追加します。
開発環境
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) }