techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

BottomNavigationを使ってみる

BottomNavigationとは

MaterialDesignのサイトによるとBottomNavigationは以下のような時に使用するように書かれています。

Bottom navigation should be used for:

・Three to five top-level destinations of similar importance (alternative: a persistent navigation drawer accessible from anywhere in the app) ・Destinations requiring direct access from anywhere in the app (alternative: tabs for only one or two destinations)

最近のアップデートでYouTubeアプリがNavigationDrawer+tabからBottomNavigationに変更されています。
では、具体的な実装についてみていきましょう。

続きを読む

Android Oの通知チャンネルを使ってみる

Android Oの通知チャンネルを使ってみる

通知チャンネルとは

Android O では、ユーザーが通知を管理できるように、統合されたシステムを提供する通知チャンネルが導入されています。Android O を対象とする場合、通知をユーザーに表示するために、1 つ以上の通知チャンネルを実装する必要があります。Android O を対象としていない場合、アプリは Android O 端末上で実行されても Android 7.0 での動作と同じように動作します。 Android Oに対応したアプリでは必ず通知チャンネルを実装する必要がある

続きを読む

Swagger Codegen で自動生成したクライアントSDKを使う(RxSwift 編)

Swagger Codegen で自動生成したクライアントSDKを使う(RxSwift 編)

前回 Swagger Codegen にて自動生成したクライアントを使って、今後は RxSwift を用いたデータバインディングを試してみる。

続きを読む

Swagger Codegen で自動生成したクライアントSDKを使う(iOS編)

Swagger Codegen で自動生成したクライアントSDKを使う(iOS編)

REST API 実装 - techium にて grape-swagger で作成した JSON 定義を元に Swagger UI で Web API 仕様書を作成したが、Swagger の定義ファイルを使ってクライアント(iOS, Android など 色々 ) のソースコードを生成することもできる。

Swagger Codegen _ API Development Tools _ Swagger

自作した Web API に対し、クライアントソースコードを吐き出して実際に通信してみる。(ドキドキ

続きを読む

OAuthSwift で AccessToken 取得

OAuthSwift で Access Token 取得

Doorkeeper - awesome OAuth2 provider for your Rails app. を使った OAuth2 認可を実装したサーバーに対して iOS アプリから実際にアクセストークンの取得を試みる。

OSS でいくつか公開されているライブラリがあるが、GitHub スター数や、更新の活発さ等から以下を選択、使用してみたところ正常にアクセストークンを取得できた。

OAuthSwift/OAuthSwift/ Swift based OAuth library for iOS

Doorkeeper 側の設定

https://YOUR_DOMAIN/oauth/applications にアクセスし、対象のアプリケーションを選択する。

Callback urls にはこれまで local tests 用の urn:ietf:wg:oauth:2.0:oob しか入れていなかったので Edit 押下で Redirect URI に追記。

urn:ietf:wg:oauth:2.0:oob
sample-app://oauth-callback

なんか命名規則っぽいのはあるのかな。とりあえず付けた感。

Installation

iOS アプリ側に戻る。
今回パッケージ管理には Carthage を使用しているので Support Carthage の通りに。

How to

How to の通りに。

URL Schemes の追加。

f:id:kfurue:20170830074213p:plain

AppDelegate.swift に以下を追記。

import UIKit
import OAuthSwift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    
    func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if (url.host == "oauth-callback") {
            OAuthSwift.handle(url: url)
        }
        return true
    }
・
・
・

とりあえず動作確認用なので、ViewController 上でお試し。

ViewController.swift に以下を追記。

import UIKit
import OAuthSwift

class ViewController: UIViewController {

    let oauthswift = OAuth2Swift(
        consumerKey:    "15afda6f72009b78571150d63f57bc690a436c8e1199c09bc2de05bc63c09f14",
        consumerSecret: "e590044244da414ece872de0ada52aed33d1cf889d365cb3da4dceed710668b8",
        authorizeUrl:   "https://fierce-wave-40771.herokuapp.com/oauth/authorize",
        accessTokenUrl: "https://fierce-wave-40771.herokuapp.com/oauth/token",
        responseType:   "code"
    )
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let handle = oauthswift.authorize(
            withCallbackURL: URL(string: "sample-app://oauth-callback")!,
            scope: "", state:"hoge",
            success: { credential, response, parameters in
                print(credential.oauthToken)
                // Do your request
        },
            failure: { error in
                print(error.localizedDescription)
        }
        )

    }
・
・
・

実行すると、

  1. お試しアプリが起動
  2. (上記 ViewController に記載した OAuthSwift の処理で) Safari に自動遷移
  3. Safari 側でログイン処理を実施
  4. (Redirect URL に飛ぶ際 URL Schemes を使って)お試しアプリに自動遷移
  5. print(credential.oauthToken) の行でアクセストークンが取得できていることが確認できる

となる。

成功だ。

その他

テストについてちょっと考えていたが、このあたり Facebook はよくできているなと感じた。

テストユーザー - アプリ開発

まー Web API へのリクエストからしてそもそもモックにすることで unit test は可能か。