techium

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

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 は可能か。

REST API 実装

REST API 実装

Rails チュートリアルで作成したアプリに REST API を実装するシリーズ。

  • Doorkeeper による OAuth2 認可
  • Grape による REST API 実装
  • Swagger(OpneAPI) を用いたドキュメンテーションの追加
  • Grape Entities を使ったドキュメント中のレスポンス定義

と進めてきたので、前回決めた API 設計に沿って実装していく。

続きを読む