ON THE HAND

引っ越しました http://tech.andhandworks.com

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

このエントリーをはてなブックマークに追加

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

引っ越しました。

ON THE HAND は
http://tech.andhandworks.com
引っ越しました。

今後ともよろしくお願いいたします。

このエントリーをはてなブックマークに追加

スポンサーサイト
  1. 2017/01/27(金) 23:52:54|
  2. その他
  3. | コメント:0

Swift Realm を導入する

アプリ開発系の話が続きますが、書いておかないと忘れてしまうので。
今回はiOS アプリで Swift Realm を導入する方法です。

Swift Realmって何?

Realm は組み込み用DB(データベース)です。
iOS と android のどちらでも使えます。
iOS には Objective C 版と Swift 版があり、Swift 版が Swift Realm。

ただし、DBと言ってもSQL文などの高度な検索言語は使えません。
その代わり、クラスのメンバ変数がそのままDBカラムになっていたり、
オブジェクトがDBのレコードを表してしていたりします。
そのため、クラス定義でDBスキーマを定義し、
オブジェクト操作がレコード操作になるなど、
データベースの知識がなくても組み込みDBを扱うことができます。

ここまでで「は?宇宙語?」と思った方は気にせず先に進んでください。

Cocoa Pods

Swift Realm を導入する前に、まずは Cocoa Pods を入れます。
Cocoa Pods は Mac のライブラリ管理ツールです。

まず、Mac 上でターミナルを開きます。
開いたら次のコマンドを実行します。
上から順に
「Ruby のアップデート」
「Cocoa Podsのインストール」
「Cocoa Podsの初期化」です。
$ sudo gem update --system
$ sudo gem install cocoapods
$ pod setup

これだけです。

Swift Realm のインストール

Swift Realm を導入します。

まず、Xcode のプロジェクトフォルダに移動します。
例えば、デスクトップに ProjectName というプロジェクトがあるならこんな感じ。
$ cd ~/Desktop/ProjectName/

次に、空の pod ファイルを作ります。
$ pod init

Podfile というファイルが出来上がるので、これに設定を書き込みます。
$ vi Podfile

vi コマンドは k, j, h, l キーがそれぞれカーソルの上下左右移動。
i キーで入力モード。
ESC で入力モードを抜けて、「:wq」で保存して終了、です。
(正確には「:w」が保存。「:q」が終了。)
target 'ProjectName' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for ProjectName
  pod 'Realm'
  pod 'RealmSwift'
    :

終了したら Swift Realm をインストール。
$ pod install

インストールに成功すると、プロジェクトフォルダ内に
ワークスペースファイルが出来上がります。
Xcode でプロジェクトファイルを開いている場合は、
一旦閉じてワークスペースファイル(〜.xcworkspace)を開きます。

workspace に Pods プロジェクトができて、Realm がインストールされていると思います。
Xcode のファイルツリー上でプロジェクト名をクリックします。
TARGETS でプロジェクト名をクリックします。
General タブの一番下に Linked Frameworks and Libraries があるので Realm.framework を追加。

出来上がったら、試しにビルドしてみて問題なければインストール終わり。

余談ですが、vim (vi) は軽量なコマンドラインエディタです。

コマンドラインなのでとっつきにくいですが、
正規表現での一括置換や、テキストブロックでのコピペなど
通常のエディタではできない機能がかなりたくさんあります。

vim に慣れてくると、いちいちマウスでポチポチしながら
編集するのが馬鹿馬鹿しくなってきます。

Swift Realm を使う

Swift Realm では1つのテーブルを1つのクラスで表現します。
試しに、SampleDB.swift というファイルを作ります。
import Foundation
import RealmSwift

class Sample : Object {
    dynamic var id:Int = 0
    dynamic var name:String = ""
    dynamic var password:String = ""
    
    override static func primaryKey() -> String? {
        return "id"
    }
    
    override static func indexedProperties() -> [String] {
        return ["id","name","password"]
    }
    
}

class SampleDB {
    var realm = SampleDB.getRealm()

    static func getRealm() -> Realm {
        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let realmPath = (paths[0] as NSString).appendingPathComponent("sample.realm")
        let realmURL = URL(fileURLWithPath: realmPath)
        
        return try! Realm(fileURL: realmURL)
    }
}

Sample クラスがDBテーブル構造を表しています。
このサンプルコードの場合は「id Int型」「name String型」「password String型」の3種類のカラムが存在しています。

SampleDB クラスはDBアクセスクラスです。
static に Realm オブジェクトを持ってしまうのが楽かもしれません。

getRealm() 関数の中は、本当は「return try! Realm()」だけでも構いません。
ただし、その場合は Sample クラスで定義されているテーブルにだけアクセスできます。

Realm(fileURL) 関数を使うと、fileURL で渡したファイルパスのテーブルを参照します。
今回のサンプルコードの場合は「sample.realm」というファイルのテーブルを使います。

このようにしておくと、DBアクセスクラスを複数作成して、
それぞれ異なるテーブル構造を定義することが可能です。

ここまでできてしまえば、SampleDB クラスに関数を追加して
realm オブジェクトにレコードを追加したり検索したりすればOK。

Realm へのアクセス

realm オブジェクトへのアクセスは main スレッドから行う必要があります。
例えば、レコードを追加する場合はこんな感じ。
    func append( item:Sample ) {
        DispatchQueue.main.async {
            try! self.realm.write() {
                self.realm.add(item, update: true)  // データが無ければ追加、あったら上書き
            }
        }
    }

add 関数で update:true を指定しておくとSQL 文のUPSERT相当の動きになります。

その他、Realm の詳細については公式サイトのマニュアルにサンプルコード付きで説明されています

このエントリーをはてなブックマークに追加

  1. 2017/01/21(土) 01:31:23|
  2. iOS
  3. | コメント:0

オンライン少額決済サービス

ちょっと訳あって500円程度のものを短期間かつ散発的にオンラインで販売する方法を調べています。
多少手作業を挟んでも構わないので、顧客管理などはどうとでもなるのですがやはり最大の難関は決済手段。

一番確実なのは銀行振込ですがやはり手数料と入金確認がネックですね。
いくつか決済手段を調べたので備忘録として残しておきます。

前提条件


いまのところ、次のような用途を想定しています。
  • 単価は500円程度。高くても1000円まで。

  • 1ヶ月程度の期間限定で年に1、2回程度の開設。

  • 販売数は数十件から多くても500件程度。

  • 1ヶ月で数十件とは言え、1件ずつ振込確認するのは不可能。

  • 単価500円が数十件なのでせいぜい数万円程度の売り上げ。

  • 他人のWebサイトを使うためシステム開発は不可。
    せいぜいブログかfacebookでサイト構築する程度。

  • 購入者はさほどネットに詳しくなく、普通にスマホでLINE, Facebookを使う程度。


Paypal


当たり前のように最初に思いつくのが Paypal

手数料は決済1回ごとに 3.6%+40円。
つまり、単価500円なら 500 x 3.6% + 40 = 58円が手数料です。
また、Paypal 口座から銀行口座へ売り上げを移す際、5万円以下なら250円掛かります。

販売数が80件なら、58円 x 80件 + 250円 = 4,890円をPaypalに持って行かれます。
売り上げ4万円なので 4,890 ÷ 40,000 x 100 = 12.2% 程度の決済手数料。

決済手数料としては可もなく不可もなく、といったところでしょうか。

あと、Paypal で面白いのは Facebook ページから Paypal を使えることですね。
Facebook ページには「ショップ」というメニューがあるのですが、
「ショップ」に商品を掲載すると Paypal 決済を使って販売できます。

とは言え、日本では Paypal ユーザが少ないので、購入者の利便性を考えるとちょっと厳しいかもしれません。
手段は問わず、とにかく簡単にオンライン販売したい、という目的であれば良いかもしれません。

Amazon Payments


決済手数料が手軽で、ブランド力もあるのがAmazon ペイメント
物販、サービス販売の場合は売り上げの 4% です。
売り上げが4万円なら決済手数料は 1,600円。

しかも、購入者は Amazon.co.jp の普通のアカウントで支払いができるので、
サービスに対する信頼はまず問題ないでしょう。
販売サイト側も Amazon ペイメントに飛ばすためのボタンを設置するだけなので開発不要。

もう完璧じゃないか、と思ったら、Amazon ペイメントを使用できるのは登記済みの法人のみでした。
はい残念。

SPIKE


最近有望株らしいのがメタップスの SPIKE

月間10万円以下なら決済手数料が無料です。
売り上げの振込手数料に500円掛かるだけ。
売り上げ4万円だとすると 1.2% ですね。

10万円を超えても、超過分に対して 3.9% + 30円なので Paypal より安いです。

ただし、決済手数料無料のフリープランで使えるのは VISA と MASTER 限定。
500円の購入のために Paypal のアカウントを作ってもらうのに比べれば、
VISA, MASTER 限定の方がまだマシかもしれません。

販売サイト側はリンクの設置だけなので高度な開発は不要。
また、Facebook アカウントで SPIKE にログインできてしまいます。

Facebook アカウントで認証すると、いきなり商品販売のダッシュボードが表示されます。
口座登録はおろか、名前すら登録する必要はありません。なんだこれは。

懸念があるとすれば、購入者が販売サイトからSPIKEの決済ページに飛ばされた時に
信用してくれるかどうか、という点でしょうか。

Pay-easy(ペイジー)


少額決済用と言って良いのかわかりませんが、コンビニ払いが出来るので
新興系の決済会社に抵抗があるような購入者向けには良いかもしれません。

個人が普通に販売に使おうと思うと難しいのですが、
先ほどの SPIKE などの決済サービスが Pay-easy に対応しているケースがあります。
そのようなオプションを使うと、システムの手軽さと Pay-easy の信用を組み合わせられます。

ちなみに、SPIKE 経由で Pay-easy を使った場合の手数料は 2.95% + 30円。
単価500円を80件の場合、3,580円。
売り上げの 8.9% くらいになりますね。

Stripe


SPIKE の対抗馬と言われているのが Stripe
決済手数料は 3.6% です。
対応カードは VISA, MASTER, AMEX。
また、デビッドカードにも対応しています。

すごいのが、130通貨対応なので海外向けにも決済が可能なところ。
また、月額課金にも対応しています。
トライアル期間やクーポンなどの設定もできるようで、
少額決済とは言え、プロユースが想定されているようです。
SDKやマニュアル(英語)も充実しています。

SPIKE の対抗馬と言うよりは、対象にしているユーザ層が違うような印象です。

Yahoo! ウォレット Fast Pay


Yahoo!ウォレットが決済サービスを提供しています
決済手数料は 3.25%。安いです。
さすが Yahoo! だけあって対応カードも JCB, VISA, MASTER, AMEX, Diners。

ただし、バックエンドでシステム結合するタイプなので、
PHP などサーバサイドに組み込む必要があります。

前提条件の「システム構築不可」を満たせないのでダメでした。
惜しい。

ヤフオク


Yahoo! ウォレットと言われてふと思いついたのがヤフオク。
Yahoo!かんたん決済だって立派な決済手段です。

単純にヤフオクで商品点数100個とかの出品をずっと出しっぱなしにしておけば、
とりあえずYahoo!かんたん決済で買ってもらえるかもしれません。

手数料は Yahoo! プレミアム会員費が月額489円。
ワンプライス出品すれば 8.64%。
500円のワンプライス出品で4万円分売れれば
40,000 x 8.64% + 489 = 3,945円。

微妙に2ヶ月にまたがってプレミアム会員費が再度掛かるようであれば、
プレミアム会員に入らずにワンプライス出品すれば 10% です。

他に比べると、若干手数料は高いですが、
手軽さで言えば悪くない選択肢かもしれません。

しかも販売期間が決まっているような商品の場合、
オークション終了日時を結構正確に指定できます。

他の決済手段だと、手作業で止める必要があるので意外とヤフオクは優秀。

まとめ


  • Paypal:Facebookページで売るならほぼ一択

  • Amazonペイメント:起業する勢いで

  • SPIKE:本命

  • Pay-easy:SPIKE のオプションとして

  • Stripe:ガリガリ開発するなら

  • Yahoo!ウォレット Fast Pay:知名度はあるが Stripe と比較検討

  • ヤフオク:大穴。期間限定かつエイヤで済ませるなら

このエントリーをはてなブックマークに追加

  1. 2017/01/19(木) 00:56:18|
  2. その他
  3. | コメント:0
次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。