強火で進め

このブログではプログラム関連の記事を中心に書いてます。

「南東京iPhone開発者勉強会 9回目」に参加しました

南東京iPhone開発者勉強会 9回目 : ATND
http://atnd.org/events/18085

@sin_jintan さんのTogetterまとめ。

Togetter - 「南東京iPhone開発者勉強会 #9」
http://togetter.com/li/165025

角様:iOSアプリの広告による収益化 〜各アドネットワークの傾向、SmAddによる収益最大化〜

※遅刻してしまったのでこの講演は最後の方しか見れてません。

  • スライド

http://www.slideshare.net/SumiKoichiro/ios-smadd

  • SmAdd

http://www.smadd.net/

yuumi3様:EvernoteAPI

  • 最初のキーでアクセス出来るのはSoundbox内だけ
  • ここで新たにアカウントを登録する
  • テスト用データを作る
  • 専用クライアントからはアクセス出来ない
  • 本来のデータにアクセス出来る様にアクティベーションを依頼するページ。見つけるのが大変らしい

Evernote API Key Activation
http://www.evernote.com/about/developer/api/activate.php

  • 主なデータとして、User Store、Note Storeが有る
  • ノートのデータ形式はENML。XML、ほぼHTML
  • 実際のデータはen-mediaなど独自のタグ内に格納
  • Webkitで表示するとおかしな事になる
  • APIには認証で戻るトークンを渡す
  • エラー時には例外が発生する。Objective-Cの時にも…
  • 関連データを取得する、しないが出来る

サンプル
https://github.com/yuumi3/EvernoteTest

  • NoteにはGUIDが振って有る。それを使ってアクセスする
  • リファレンスに記載されている型の情報はstringやi32など言語に依存しない形で記載されている。ヘッダで実際の型を確認
  • データ取得の数を1000など指定してもネットワークやメモリの関係なのか実際に1000個は取得出来ない。実際に取得したい数に達するまで繰り返しアクセスして取得する

吉川様:便利なカテゴリ

最初に吉川さん作のPDFを電子書籍(iOS)アプリ化出来るMacアプリの紹介。データはサーバに設置、データの暗号化にも対応。

kyoshikawa/ZUtilities - GitHub
https://github.com/kyoshikawa/ZUtilities

  • 以下の様なカテゴリが有る
    • SHA1MD5にしたNSDataを返す
    • uintやintをArrayにappendする
    • uintやintをread,writeする
    • 色関連の変換。RGBやHSV、CGColorなどに対応
    • Rectをアスペクト比を保ったまま、拡大/縮小
    • NSCharacterSet関連

akisute様:Three20かCore Dataのネタ

  • Core Dataは多分やらないとの事
  • Highly Specialized for Web(HTML)
  • 出来る事は何か→Webの真似事をするライブラリ
  • 非同期でリソースをロード
  • URLベースのナビゲーション
  • スタイルシート
  • URL(scheme URL)とViewControllerのマッピングが可能
  • TTViewControllerから派生したクラスを使用してViewControllerを作るのが基本。それ以外でも作成出来るけどとても大変
  • Tab BarやModalでの動作が不安定。公式には対応と書いて有るが信用しない方が良い
  • TTImageView は神。非同期でイメージを呼ぶ
  • TTImageViewの為だけにでも使う価値が有る
  • TTStyledTextLabel。本文のテキストなどを処理。リンク、Bタグなどに対応
  • TTStyleSheet。シングルトンで実装された1つのプロパティを変更するとアプリ全体のスタイルが変更される
  • TTTableViewController。固定のTableViewを表示させる時に便利
  • dataSourceに配列でタイトルと遷移先のURLを記載するだけで使える。他にも使えるものが有るがThree20に最初から有るものだけ
  • TTPhotoViewController。拡大/縮小やフリップによるページ遷移、サムネイルによる一覧表示、スライドショーなどが可能。
  • 問題点
    • ドキュメントが存在しない

http://three20.info/

    • Webから探すのが大変
    • クラス定義が記載 & 解説2行程度のドキュメント
  • 既存のアプリをThree20を使ったアプリに変更するのはほぼ無理
  • FaceBookアプリを作る為に作られたライブラリなので色々と落とし穴有り
  • HTTPのタイムアウト時間を設定するにはソースを変更する必要有り

岸川様:(未定)

  • Auto-Renewable Subscriptions 自動更新購読
  • 最近追加されたアプリ Network Link Conditioner → ネットワーク速度が遅い環境をシミュレーションしてくれる。実行すると「システム環-境設定」に追加される。現在のバージョンは起動すると落ちる。使えない
  • 参考資料
    • In App Purchaseプログラミングガイド
    • セッションビデオ Session 510 - In App Purchase for iOS and Mac OS X
    • iTunes Connect Developer Guide
  • 資料やコードは変わっている事が多いのでWeb上の情報を見る前に上記の資料を見ておくのが良いのでは…
  • 4つの課金タイプ
    • Consumable(消耗型)
      • 必要なら何度でも購入する
      • ゲーム内のアイテムなどに使用
    • Non-consumable(非消耗型)
      • 購入は一度キリ
      • 再購入は課金されない
      • 購入履歴を管理する必要はない
      • 購入すると広告を消せる、新しいステージを追加などの時に使用
      • 購入したものは永続的に使用出来るものに使用
    • Auto-renewable subscriptions(自動更新購読)
      • キャンセルしない限りは自動的に更新
      • 有効期間内の再購入は課金されない
      • 購入履歴を管理する必要はない
    • Subscriptions(定期購読)
      • 昔使われていた。今はAppleもAuto-renewable subscriptions(自動更新購読)を使う様にと言っている
  • Auto-renewable subscriptionsのメリット
      • 非消耗型とほぼ同じ処理
      • 組み込みタイプの商品ならアプリケーション単体で実現出来る
      • 課金は自動だが、コンテンツのダウンロードはアプリ側で行う必要が有る
      • 現実の雑誌の定期購読は自動的に送られてくるけど、アプリの場合は有効期間は過去のものも読める様にしておいた方が良い
      • 1ヶ月アプリを起動しなかった場合にコンテンツを入手出来なかったとう事も発生する
  • 値段はソースにハードコーディングしないでStore Kit経由で取る
  • 昔はハードコーディングされていたらリジェクトされた。現在は審査時に見てないっぽい
  • priceLocaleを使って金額の前にユーロやドル記号を付けるなどのLocale対応を行う
  • iTunes Connect登録しても反映されない事が有る。全サーバーに反映されない場合などに発生する可能性有り
  • リストア処理。非消耗型だと再購入しても課金されないがその数が多くなると大変なのでちゃんとリストアボタンを設置する事
  • 定期購読のものをもう一度購入しようとするとエラーになる為、定期購読の場合にもリストアボタンは必須
  • 何らかのバグでレシートの保存に失敗した時などの対策にも成る
  • リストアで取得出来るデータは有効期間が切れたものも含まれる。サーバーに問い合わせて有効期間を確認する
  • 自動更新は期限が切れるちょっと前(数時間前)に更新される
  • 値段を上げたら自動更新はオフになり、ユーザにはメールで通知
  • 自動更新の期間はアプリから分からないので fm.i-radio.monthly などProductIDに含めると良い
  • 購入情報はKeyChainに保存するのが確実
  • オフライン時の処理
    • レシートが検証出来ない
    • 一時的に機能をオフにする、expires_dateとデバイスの時刻を比較するなど
  • サンドボックス環境はたまにおかしくなる
  • ユーザ情報(メールアドレスや郵便番号など)を提供する代わりに無料でサブスクリプションを使えるなどの設定も可能
  • ユーザが課金を禁止設定している事もあり得るのでそのチェックを行う。まぁ、途中でエラーになるでしょうけど…
  • 購入をキャンセルされたときはレスポンスがちゃんと来る。キャンセルされたかどうかはエラーコードで判定可能
  • 定期購読を検証する時にはShared Secretを使う