SlideShare a Scribd company logo
1 of 57
Download to read offline
スマホキャンプ サマー2012

       おいでよ、「スマホキャンプ」
      ∼Flash Proでスマホアプリ∼ANEとアプリ内課金に挑戦∼

        2012年8月3日・4日
        札幌市デジタル創造プラザ
        インタークロス・クリエイティブ・センター(ICC)
        講師:白石哲也(虫カゴデザインスタジオ株式会社)



12年9月30日日曜日
自己紹介

        虫カゴデザインスタジオ株式会社
        白石 哲也(しらいし てつや)

        東京造形大学卒業後、マクロメディアに入社。Director、Flash、Dreamweaverなど
        の製品サポートやQAを担当。独立後、虫カゴデザインスタジオ株式会社を設立し、
        現在では、Flashを使用したiPhone、Androidなどのアプリ制作に従事。



              twitter : @mushikago
              facebook : http://facebook.com/mushikago
                   : http://facebook.com/mushikago.inc
              web : http://mushikago.com/
12年9月30日日曜日
スマホキャンプ




12年9月30日日曜日
概要
        ■概要:

                iOS Dev Centerでの登録手順∼Developerアカウント作成
                ∼アプリ内課金(in-app purchase)のはじめの一歩まで。
                ネイティブ拡張(Native extensions for Adobe AIR)に
                挑戦!

        ■開発ツール:

              • Adobe Flash Professional CS6 (AIR 3.2)

              • Adobe Flash Builder 4.6 (AIR 3.2)

              • Xcode 4.3.3




12年9月30日日曜日
目標
              ネイティブ拡張(ANE)を使って
                Adobe AIRアプリに
              アプリ内課金を実装してみる




12年9月30日日曜日
予定

   ‣ 1日目                         ‣   2日目
              Adobe AIRとは            自力でやる
              ネイティブ拡張とは              ANEからのイベント
              iOS Dev Center解説
                                     購入済みの記録
              アプリ内課金とは

              他力でやる


12年9月30日日曜日
Adobe AIRとは



12年9月30日日曜日
Adobe AIR

        Adobeが開発・無償提供している
        クロスオペレーティングシステムランタイムの事です。
        Adobe AIRアプリケーションは、Adobe
        AIRランタイムをインストールしたMac
        OS、Windows OSにおいて、ネイティブの
        デスクトップアプリケーションと同様にイ
        ンストールされ、実行する事ができます。
        AIRアプリはAIR SDKをサポートしている
        Flash ProfessionalやFlash Builderなどで
        開発することができます。



12年9月30日日曜日
モバイルAIR

        AIRの技術を使って
        モバイルデバイス向けアプリを作成する事ができます。
         モバイル向けに開発したAIRアプリケーシ
         ョンは、モバイルデバイス上にネイティブ
         アプリケーションとしてデプロイされ、
         AndroidではAPK、iOSではIPAとしてパ
         ッケージされます。これらは、ネイティブ
         アプリケーションと同様にGoogle Playや
         Apple App Storeで配布することが可能
         です。



12年9月30日日曜日
モバイル用 AIRランタイム

        Captive Runtime
        iOSでは、Captive Runtimeという形で、
        各AIRアプリの中にAIRランタイムが同梱
        される形になります。
                                      コンテンツ
        Androidでは、アドビからAIRランタイム
        が無償で配布されており、これを別途イン
        ストールしてもらうことで、アプリケーシ
        ョン本体のみを配布して実行させることが
        できます。AIR3以降は、Androidでも        ラインタム
        Captive Runtimeを選択できるようにな
        りました。
                                      AIRアプリ



12年9月30日日曜日
AIR for iOS / Android

        Adobe AIRでモバイルアプリを開発するメリット
              • iOS版とAndroid版をワンソースで開発できる。

              • Flash Pro、Flash Builderで習得した知識や開発環境が利用できる。



                             ActionScript
              iOS                                 Android
                                AIR




12年9月30日日曜日
AIRネイティブ拡張(ANE)とは




12年9月30日日曜日
AIRネイティブ拡張(ANE)

        AIR ネイティブ拡張(ANE)を利用することで、
        デバイス固有の機能にアクセスできます。




              iOS               Android
                         AIR



12年9月30日日曜日
アプリ内課金       (In-App Purchase)

        アプリ内課金はデバイス固有の機能なので、
        ANEを使ってアクセスすることになります。



              In App Purchase


        iOS


                                        AIR


12年9月30日日曜日
構造

        ANEを利用している部分は、
        AIRランタイムを介さずに直接OSやライブラリに繋がる

                    getHelloWorld()                                            iOS


              AIR                                   xx.call("GetHelloWorld")

                            ANE


                                          ネイティブ拡張
                                      ActionScriptライブラリ                         デフォルト以外の
                                                           ネイティブ拡張
                                                                                フレームワークや
                                                            ライブラリ
                                                                                 ライブラリ等




12年9月30日日曜日
ANEはどうやって作るか


               Xcode       Flash Builder                      Flash Pro   Text Editor




                                           抽出
                ●●.a          ●●.swc            library.swf    ●●.p12       ●●.xml
              ネイティブ拡張       ネイティブ拡張                           証明書ファイル     ネイティブ拡張
               ライブラリ    ActionScriptライブラリ                                  記述ファイル



      ターミナル
                                                  adt


                                            ●●.ane
                                           ANEファイル

12年9月30日日曜日
ADT (AIR Developer Tool)

        ADTコマンドの例:ANEの作成
        adt -package
         -storetype pkcs12
         -keystore mykey.p12
         -target ane FirstHelloWorldANE.ane extension.xml
         -swc HelloWorldANE_ASLIB.swc
         -platform iPhone-ARM library.swf libHelloWorldANE.a




                                               ※上記は本来一行で改行しません。
                                               ※黄色文字は任意のファイル名
                                               ※桃色文字は抽出したままのファイル名



12年9月30日日曜日
PATH 環境変数

        SDK bin ディレクトリをPATH環境変数に含めると便利
        http://adobe.ly/NFbKAc

        cd
        cat >> .bash_profile
        export PATH=$PATH:/Applications/Adobe Flash CS6/AIR3.2/bin
        (Ctrl+Shift+D)
        cat .bash_profile
        echo $PATH
        adt -version
                                 ※Flash Professional CS6にAIR3.2が含まれているので、
                                  そのパスをPATH環境変数に含めています。



12年9月30日日曜日
07 First HelloWorld

                    最初のHelloWorld

        ADC記事の通りにやってみる
        ネイティブ拡張(Native Extensions)入門
        第2回 ネイティブ拡張の開発方法 前編 (by 有川 榮一氏)
         http://adobe.ly/PFq3sx (中盤の図8あたりから)

          手順は、MUSHIKAGO APPS MEMO を参照。
           1.Cocoa Touch Static Library(.a)の作成
           2.ネイティブ拡張ActionScriptライブラリ(.swc)の作成
           3.library.swfの抽出
           4.証明書ファイル(.p12)の作成
           5.ネイティブ拡張記述ファイル(.xml)の作成
           6.ADTコマンドを使ってANEファイル(.ane)を作成
           7.Flash ProfessionalのAIR for iOS(.ipa)でANEを使用

12年9月30日日曜日
注意点

        次の3箇所のextensionIDは統一
          •HelloWorldANE_ASLIB.swc内の
          ExtensionContext.createExtensionContext("mushikago.ane.HelloWorld", "type")

          •extension.xml内の
          <id>mushikago.ane.HelloWorld</id>

          •FirstHelloWorld_FlashPro-app.xml内の
          <extensions>
            <extensionID>mushikago.ane.HelloWorld</extensionID>
          </extensions>
           ※ここは、Flash Proの場合、ANEを読み込むと自動的に書いてくれます。


        最新 iOS SDKの指定
          Flash Proの場合、AIR for iOS設定ダイアログ内に指定する「iOS SDK」という欄があります。
              ➡/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/
                Developer/SDKs/iPhoneOS5.1.sdk
           ※Flash Proの場合、この指定をしないでパブリッシュすると、アプリ起動時にクラッシュします。

12年9月30日日曜日
【DEMO】 - 07
                     01

              ネイティブ拡張 (ANE) に挑戦




12年9月30日日曜日
iOS Dev Center 解説

        いろいろやる前に確認
        iOS Dev Centerへの登録やiTunes Connectでのアプリ登録が必要です。
        https://developer.apple.com/

                    MUSHIKAGO APPS MEMO
                     http://b.mushikago.com/

         • 日本のApple StoreでiOS Developer Programを購入し
              Activateするまでの全スクリーンショット
              http://mushikago.com/i/?p=917

         • iOS Dev Centerの事や証明書(.p12)と
              プロビジョニングプロファイル準備 ∼解説の解説の解説
              http://mushikago.com/i/?p=306

         • iOS Dev Center : App Storeから配布(Distribution)するまでのMEMO
              http://mushikago.com/i/?p=563


12年9月30日日曜日
アプリ内課金とは
              (In-App Purchase)




12年9月30日日曜日
プログラミングガイド

        In App Purchase プログラミングガイド
        iOS Developer Library
        日本語に翻訳されたiOSのドキュメントです。
        http://bit.ly/MWq8YE

        In App Purchase プログラミングガイド

        http://bit.ly/PMTzy5




12年9月30日日曜日
フレームワーク

        Store Kitフレームワーク
        In-App Purchaseは、Store Kitフレームワークを使用して
        アプリケーションに実装します。




12年9月30日日曜日
どんなことができるの?

        たとえば、
        In-App Purchaseを使用して次のようなシナリオを実装できます。

              ✦ 基本バージョンにプレミアム機能が追加されたアプリケーション
              ✦ ユーザが新しい本を購入してダウンロードできるブックリーダーアプリケーション
              ✦ 新しい環境(レベル)の購入を提案するロールプレイングゲーム
              ✦ プレーヤーが仮想の不動産を購入できるオンラインゲーム




                                buy
                             ※In-App Purchaseが行うのはペイメントの受け取りのみです。

12年9月30日日曜日
プロダクト

        Storeで販売する機能はすべてプロダクトです。
        プロダクトは、デベロッパが新規 アプリケーションを作成するのと同じ方法で、iTunes Connectを
        通してApp Storeに関連付けられます。
        In-App Purchaseを使用して販売できるプロダクトは、次の4つがサポートされています。

        ✦コンテンツ (Content)。
        アプリケーションで提供できる電子書籍、雑誌、写真、アート作品、ゲー ムのレベルと登場人物、その他
        のデジタルコンテンツを含みます。

        ✦機能 プロダクト(Functionality Product)。
        アプリケーションですでに提供済みの機能をロック解除 したり、拡張したりします。たとえば、あるゲー
        ムを出荷する際に、ユーザが購入できる、より 小さな単位のゲームを複数同梱して出荷することが考えら
        れます。

        ✦サービス (Service)。
        たとえば、音声のテキスト化などの一度限りのサービスをユーザに請求でき ます。1回のサービス利用に
        つき、個々の購入が発生します。

        ✦定期購読 (Subscription)。
        コンテンツやサービスを継続的に利用できるようにします。たとえば、 アプリケーションから金融情報や
        オンラインゲームのポータルへのアクセスを1ヶ月単位で提供 するなどが考えられます。


12年9月30日日曜日
留意すべき重要なガイドライン

     留意すべき重要なガイドライン

       ✦ アプリケーションの中で提供できるのは電子商品または電子
          サービスに限られています。In-App Purchaseを使って実物
          の商品やサービスを販売することはできません。

       ✦ 中間通貨のようなアイテムを提供することはできません。これ
          は、特定の商品やサービスを購入するということがユーザに
          認識されることが重要であるためです。

       ✦ 販売用に提供するアイテムには、ポルノ、 謗、中傷、ギャン
          ブル(ギャンブルのシミュレーションであれば問題ありません)
          や、それらに関連するようなものを含めないようにします。




12年9月30日日曜日
プロダクトID

        App Storeへのプロダクトの登録
        App Storeはさまざまな種類のプロダクトに対応しています。
        ✦Consumable(消耗型)
        毎回購入

        ✦Non-consumable(非消耗型)
        永久に入手(機能制限解除もの)

        ✦Auto-renewable subscriptions(自動更新購読)
        レンタルのように期限付き

        ✦Free subscriptions(無料購読)

        ✦Non-renewing subscriptions(非更新購読)


12年9月30日日曜日
08 Xcode InAppPurchase

                  Xcodeで作ってみる

        プログラミングガイドの通りにやってみる
        「アプリケーションへのStoreの追加」の項
        http://bit.ly/PMTzy5 (20ページ∼24ページ)
          手順は、MUSHIKAGO APPS MEMO を参照。
           1.XcodeのテンプレートからシンプルなiPhoneアプリを作る
           2.StoreKitフレームワークをプロジェクトに追加
           3.InAppPurchaseManagerクラスを作成
           4.「Buy」ボタンを用意し、押すと課金処理開始
           5.シミュレーターで動作確認し、invalid product identifierを確認
           6.iTunes Connectでアプリ内課金用のプロダクトを準備
           7.再度シミュレーターで動作確認し、購入ダイアログを確認



12年9月30日日曜日
実機でテストする際の注意

        アプリ内課金の購入テストするときは Test User を使う事。
       Test Userは、iTunes Connectの Manage Users で作成できます。


      また、実機でサインイン中のアカウントをサインアウトするには、
        設定>Store から最下部のApple ID欄をクリックします。




                            Test User




12年9月30日日曜日
【DEMO】08

              アプリ内課金に挑戦 (Xcode編)




12年9月30日日曜日
他力でやる



12年9月30日日曜日
誰か助けて!

        ANEは買えます。
        「今すぐにでもAIRアプリにアプリ内課金を実装したい」場合
        Milkman Games
        In-App Purchase iOS Extension $49.99
        http://www.milkmangames.com/




12年9月30日日曜日
09 Hello Milkman FlashPro

                     Milkman Games StoreKit
                     http://www.milkmangames.com/

        com.milkmangames.extensions.StoreKit.ane
        を使ってみる
        当然ながら、これを使うにはANEを購入する必要があります。
        参考:
        ADC記事:Using the iOS In-App Purchase native extension for Adobe AIR
        http://adobe.ly/NXG0Jp
          手順は、MUSHIKAGO APPS MEMO を参照。
           1.Flash Pro CS6でAIR for iOSの新規ファイルを作成。
           2.extensionフォルダをFLAの階層にコピー。
           3.ActionScript設定ダイアログでaneを追加。
           4.フレームスクリプトにActionScriptを入力。
           5.パブリッシュして実機で確認。

12年9月30日日曜日
【DEMO】09

              Milkman Games StoreKit




12年9月30日日曜日
自力でやる



12年9月30日日曜日
リンケージオプション

        前回作ったANEのHelloWorldアプリを使って
        iOS標準のコントロールやフレームワークを使ってみる。
        (iOS SDK 4.2で利用可能なパブリックフレームやiOS SDK 5 以降のデフォルト以外のもの)


        ネイティブ拡張パッケージの作成
              http://adobe.ly/P1ZVHh
              -platformoptions フラグは、iOS フレームワークに対して
              デフォルト以外のリンケージオプションを指定する場合に使用する
              オプションの項目です。

        iOS ネイティブライブラリとリンケージオプションファイルの説明
              http://adobe.ly/NqfQxU
                                            MacOSのみ
12年9月30日日曜日
-platformoptions フラグ


               Xcode        Flash Builder                      Flash Pro   Text Editor    Text Editor




                                            抽出
                ●●.a           ●●.swc            library.swf    ●●.p12       ●●.xml        ●●.xml
              ネイティブ拡張        ネイティブ拡張                           証明書ファイル     ネイティブ拡張         リンケージ
               ライブラリ     ActionScriptライブラリ                                  記述ファイル       オプションファイル



     ターミナル                                                     adt

                                                    ●●.ane
                                                   ANEファイル



12年9月30日日曜日
ADT (AIR Developer Tool)

        ADTコマンドの例:リンケージオプションを指定する場合
        adt -package
         -storetype pkcs12
         -keystore mykey.p12
         -target ane SecondHelloWorldANE.ane extension.xml
         -swc HelloWorldANE_ASLIB.swc
         -platform iPhone-ARM library.swf libHelloWorldANE.a
         -platformoptions myplatformoptions.xml


                                               ※上記は本来一行で改行しません。
                                               ※黄色文字は任意のファイル名
                                               ※桃色文字は抽出したままのファイル名



12年9月30日日曜日
リンケージオプションファイル

        iOS のリンケージオプションファイル (.xml)
        <platform xmlns="http://ns.adobe.com/air/extension/3.1">
              <sdkVersion>5.1</sdkVersion>
              <linkerOptions>
                <option>-framework MapKit</option>
                <option>-framework StoreKit</option>
              </linkerOptions>
        </platform>




12年9月30日日曜日
13 Second HelloWorld

                     2回目のHelloWorld

        ANEを使って、
        UISwitch、UIButton、MKMapViewを表示してみる。
          参考:FxUG → http://bit.ly/MQMdZb

          手順は、サンプルファイル を参照。
           1.「10_HelloWorldANE_EXLIB」GetHelloWorld内のみ書き換え。
           2. Mapkitの#importを忘れずに。
           3.「11_PlatformOptionXML」リンケージオプションファイル作成。
           4.「12_adt2」 -platformoptionsをつけてADT。
           5.「13_SecondHelloWorld_FlashPro」GetHelloWorldを呼ぶ。




12年9月30日日曜日
【DEMO】 - 13
                         10

              ANEでデフォルト以外のフレームワークを使用




12年9月30日日曜日
16 Third HelloWorld

                   3回目のHelloWorld
                   ANEを使ってアプリ内課金


        アプリ内課金(In-App Purchase)も
        デフォルト以外のフレームワークなので、同様に。
          手順は、サンプルファイル を参照。
           1.「14_HelloWorldANE_IAP」GetHelloWorld内のみ書き換え。
           2. InAppPurchaseManager.hの#importを忘れずに。
           3. 同様に「15_adt3」 -platformoptionsをつけてADT。
           4. アプリIDを「com.mushikago.InAppPurchaseXcode」に。
           5.「16_ThirdHelloWorld_FlashPro」GetHelloWorldを呼ぶ。




12年9月30日日曜日
注意点

        アプリケーションIDとプロダクトIDの関係
          com.mushikago.InAppPurchaseXcode.unLockという
          プロダクトを購入するサンプルになっているので、Flash Proでパブリッシュする際の
          アプリケーションID欄にも注意してください。

              ➡ com.mushikago.InAppPurchaseXcode

        Non-consumable(非消耗型)は一度のみの購入
          Non-consumable(非消耗型)のプロダクトの場合、一度購入してしまうと、
          2度目以降は、そのユーザでのテストができなくなります。
          その場合は、テストユーザを増やして新規のテストユーザで購入テストをしてください。




12年9月30日日曜日
【DEMO】 - 16
                         14

              ANEでアプリ内課金(In-App Purchase)




12年9月30日日曜日
ANEからのイベント(非同期)

        ANE側でイベントを発行してFlash側で受け取る。
        参考:AIR 3 Native Extension 12 Try Develop Async Event in C
        (by 有川 榮一氏)
        http://bit.ly/MrrLdk


               FREDispatchStatusEventAsync(ctx,msg1,msg2);



              context.addEventListener(StatusEvent.STATUS, onStatusEvent);
              function onStatusEvent(event:StatusEvent):void{
                 trace(event.code,event.level);
                 dispatchEvent(event);
              }

12年9月30日日曜日
イベントの流れ
                                         ネイティブ拡張
                                          ライブラリ
              FREDispatchStatusEventAsync



                   addEventListener
                                          ネイティブ拡張
                                      ActionScriptライブラリ
                 dispatchEvent(event)



                   addEventListener

                                      AIRアプリケーション本体


12年9月30日日曜日
20 Fourth HelloWorld

                    4回目のHelloWorld

        ANEでイベントを発行。AIRアプリで受け取ってみる。
        参考:AIR 3 Native Extension 12 Try Develop Async Event in C
        (by 有川 榮一氏)
        手順は、サンプルファイル を参照。
         1.「17_HelloWorldANE_EVENT」 FREDispatchStatusEventAsync
         2.「18_HelloWorldANE_Event_ASLIB」StatusEvent
         3.「19_adt4」 -platformoptionsをつけてADT。
         4.「20_FourthHelloWorld_FlashPro」StatusEventを受け取る。




12年9月30日日曜日
【DEMO】 - 20
                        17

              FREDispatchStatusEventAsync




12年9月30日日曜日
23 Fifth HelloWorld

                      5回目のHelloWorld

        アプリ内課金の課金結果に応じて、動作を振り分ける。
        StatusEvent.code を StatusEvent.level の
        2つのパラメータを駆使して、結果を振り分けてみます。

        この例では、購入成功した場合、codeとlevel部分に入る値は

              •code : Purchased
              •level : 購入したプロダクトID

          手順は、サンプルファイル を参照。
           1.「21_HelloWorldANE_EVENT2」 状態をcodeとlevelで振り分け
           2. appMng.myContext = ctx;を忘れないように。
           3.「23_FifthHelloWorld_FlashPro」StatusEventを受け取る。


12年9月30日日曜日
【DEMO】 - 23
                    21

               結果の振り分け




12年9月30日日曜日
購入済みの記録

        一度購入されたプロダクトは記録して、
        次回起動時以降は、ロック解除された状態にする。


                   暗号化してローカル保存

                  EncryptedLocalStore

  var storedValue:ByteArray = EncryptedLocalStore.getItem("PurchasedProdID");
  storedValue.readUTFBytes(storedValue.length)



12年9月30日日曜日
24 Fourth HelloWorld

                   6回目のHelloWorld

        5回目のHelloWorldで取得した 購入成功 のメッセージ
        を受け取り、プロダクトIDを暗号化して保存してみる。
         暗号化されたローカルストア
         参考:http://adobe.ly/PKFjnb

          手順は、サンプルファイル を参照。
           1.「24_SixthHelloWorld_FlashPro」 購入処理後、暗号化して保存。




12年9月30日日曜日
【DEMO】24

        暗号化してローカル保存:EncryptedLocalStore




12年9月30日日曜日
以上
              ネイティブ拡張(ANE)を使って
                Adobe AIRアプリに
              アプリ内課金を実装してみる




12年9月30日日曜日
つづきは
         MUSHIKAGO APPS MEMO で。
           http://b.mushikago.com/




              虫カゴデザインスタジオ株式会社
              白石 哲也(しらいし てつや)
               twitter : @mushikago
               facebook : http://facebook.com/mushikago
                    : http://facebook.com/mushikago.inc
               web : http://mushikago.com/

12年9月30日日曜日

More Related Content

What's hot

Windows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメWindows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメYoshito Tabuchi
 
はじめてのAndroid
はじめてのAndroidはじめてのAndroid
はじめてのAndroidhiro nemu
 
apportable meeting
apportable meetingapportable meeting
apportable meetingKeisuke Hata
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発Kazuki Nakajima
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。Daisuke Yamashita
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOStoyship
 

What's hot (6)

Windows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメWindows Phone / iOS / Android アプリ同時開発のススメ
Windows Phone / iOS / Android アプリ同時開発のススメ
 
はじめてのAndroid
はじめてのAndroidはじめてのAndroid
はじめてのAndroid
 
apportable meeting
apportable meetingapportable meeting
apportable meeting
 
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOS
 

Similar to スマホキャンプサマー2012:ANEとアプリ内課金に挑戦

Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
Adobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみようAdobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみようYoshiki Takeoka
 
Flash Professional CS6 の新機能のご紹介 AIR編
Flash Professional CS6 の新機能のご紹介 AIR編Flash Professional CS6 の新機能のご紹介 AIR編
Flash Professional CS6 の新機能のご紹介 AIR編KinkumaDesign
 
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】schoowebcampus
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにWeb制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにinvogue
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストYoichiro Sakurai
 
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみたNaoki Yamamoto
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプTech Summit 2016
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespacesIssei Hiraoka
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプTech Summit 2016
 
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方Yoshiki Takeoka
 
Google I/O 2011 HowToADK
Google I/O 2011 HowToADKGoogle I/O 2011 HowToADK
Google I/O 2011 HowToADKMasahiro Hidaka
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure FunctionsKeiji Kamebuchi
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_Tech Summit 2016
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioTech Summit 2016
 

Similar to スマホキャンプサマー2012:ANEとアプリ内課金に挑戦 (20)

Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Adobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみようAdobe XDプラグインをつくってみよう
Adobe XDプラグインをつくってみよう
 
Flash Professional CS6 の新機能のご紹介 AIR編
Flash Professional CS6 の新機能のご紹介 AIR編Flash Professional CS6 の新機能のご紹介 AIR編
Flash Professional CS6 の新機能のご紹介 AIR編
 
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】
Unity,Cocos-2dx,AIRを徹底比較!最新クロスプラットフォーム事情、FLASHを使ってiPhone/Androidアプリを作ろう!【とのさまラボ】
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにWeb制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた
「AIRネイティブ拡張」を使って、 AndroidでNFCを読み込んでみた
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプ
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
App014 デスクトップ アプ
App014 デスクトップ アプApp014 デスクトップ アプ
App014 デスクトップ アプ
 
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
Adobe XD Plugin「Scenegraph」の操作とDialogの作り方
 
Google I/O 2011 HowToADK
Google I/O 2011 HowToADKGoogle I/O 2011 HowToADK
Google I/O 2011 HowToADK
 
ゆるふわAzure Functions
ゆるふわAzure FunctionsゆるふわAzure Functions
ゆるふわAzure Functions
 
Visual studio de debug
Visual studio de debugVisual studio de debug
Visual studio de debug
 
App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_App017 power shellの新しい相棒_visual_studio_
App017 power shellの新しい相棒_visual_studio_
 
App017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studioApp017 power shellの新しい相棒_visual_studio
App017 power shellの新しい相棒_visual_studio
 
Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

スマホキャンプサマー2012:ANEとアプリ内課金に挑戦

  • 1. スマホキャンプ サマー2012 おいでよ、「スマホキャンプ」 ∼Flash Proでスマホアプリ∼ANEとアプリ内課金に挑戦∼ 2012年8月3日・4日 札幌市デジタル創造プラザ インタークロス・クリエイティブ・センター(ICC) 講師:白石哲也(虫カゴデザインスタジオ株式会社) 12年9月30日日曜日
  • 2. 自己紹介 虫カゴデザインスタジオ株式会社 白石 哲也(しらいし てつや) 東京造形大学卒業後、マクロメディアに入社。Director、Flash、Dreamweaverなど の製品サポートやQAを担当。独立後、虫カゴデザインスタジオ株式会社を設立し、 現在では、Flashを使用したiPhone、Androidなどのアプリ制作に従事。 twitter : @mushikago facebook : http://facebook.com/mushikago      : http://facebook.com/mushikago.inc web : http://mushikago.com/ 12年9月30日日曜日
  • 4. 概要 ■概要: iOS Dev Centerでの登録手順∼Developerアカウント作成 ∼アプリ内課金(in-app purchase)のはじめの一歩まで。 ネイティブ拡張(Native extensions for Adobe AIR)に 挑戦! ■開発ツール: • Adobe Flash Professional CS6 (AIR 3.2) • Adobe Flash Builder 4.6 (AIR 3.2) • Xcode 4.3.3 12年9月30日日曜日
  • 5. 目標 ネイティブ拡張(ANE)を使って Adobe AIRアプリに アプリ内課金を実装してみる 12年9月30日日曜日
  • 6. 予定 ‣ 1日目 ‣ 2日目 Adobe AIRとは 自力でやる ネイティブ拡張とは ANEからのイベント iOS Dev Center解説 購入済みの記録 アプリ内課金とは 他力でやる 12年9月30日日曜日
  • 8. Adobe AIR Adobeが開発・無償提供している クロスオペレーティングシステムランタイムの事です。 Adobe AIRアプリケーションは、Adobe AIRランタイムをインストールしたMac OS、Windows OSにおいて、ネイティブの デスクトップアプリケーションと同様にイ ンストールされ、実行する事ができます。 AIRアプリはAIR SDKをサポートしている Flash ProfessionalやFlash Builderなどで 開発することができます。 12年9月30日日曜日
  • 9. モバイルAIR AIRの技術を使って モバイルデバイス向けアプリを作成する事ができます。 モバイル向けに開発したAIRアプリケーシ ョンは、モバイルデバイス上にネイティブ アプリケーションとしてデプロイされ、 AndroidではAPK、iOSではIPAとしてパ ッケージされます。これらは、ネイティブ アプリケーションと同様にGoogle Playや Apple App Storeで配布することが可能 です。 12年9月30日日曜日
  • 10. モバイル用 AIRランタイム Captive Runtime iOSでは、Captive Runtimeという形で、 各AIRアプリの中にAIRランタイムが同梱 される形になります。 コンテンツ Androidでは、アドビからAIRランタイム が無償で配布されており、これを別途イン ストールしてもらうことで、アプリケーシ ョン本体のみを配布して実行させることが できます。AIR3以降は、Androidでも ラインタム Captive Runtimeを選択できるようにな りました。 AIRアプリ 12年9月30日日曜日
  • 11. AIR for iOS / Android Adobe AIRでモバイルアプリを開発するメリット • iOS版とAndroid版をワンソースで開発できる。 • Flash Pro、Flash Builderで習得した知識や開発環境が利用できる。 ActionScript iOS Android AIR 12年9月30日日曜日
  • 13. AIRネイティブ拡張(ANE) AIR ネイティブ拡張(ANE)を利用することで、 デバイス固有の機能にアクセスできます。 iOS Android AIR 12年9月30日日曜日
  • 14. アプリ内課金 (In-App Purchase) アプリ内課金はデバイス固有の機能なので、 ANEを使ってアクセスすることになります。 In App Purchase iOS AIR 12年9月30日日曜日
  • 15. 構造 ANEを利用している部分は、 AIRランタイムを介さずに直接OSやライブラリに繋がる getHelloWorld() iOS AIR xx.call("GetHelloWorld") ANE ネイティブ拡張 ActionScriptライブラリ デフォルト以外の ネイティブ拡張 フレームワークや ライブラリ ライブラリ等 12年9月30日日曜日
  • 16. ANEはどうやって作るか Xcode Flash Builder Flash Pro Text Editor 抽出 ●●.a ●●.swc library.swf ●●.p12 ●●.xml ネイティブ拡張 ネイティブ拡張 証明書ファイル ネイティブ拡張 ライブラリ ActionScriptライブラリ 記述ファイル ターミナル adt ●●.ane ANEファイル 12年9月30日日曜日
  • 17. ADT (AIR Developer Tool) ADTコマンドの例:ANEの作成 adt -package -storetype pkcs12 -keystore mykey.p12 -target ane FirstHelloWorldANE.ane extension.xml -swc HelloWorldANE_ASLIB.swc -platform iPhone-ARM library.swf libHelloWorldANE.a ※上記は本来一行で改行しません。 ※黄色文字は任意のファイル名 ※桃色文字は抽出したままのファイル名 12年9月30日日曜日
  • 18. PATH 環境変数 SDK bin ディレクトリをPATH環境変数に含めると便利 http://adobe.ly/NFbKAc cd cat >> .bash_profile export PATH=$PATH:/Applications/Adobe Flash CS6/AIR3.2/bin (Ctrl+Shift+D) cat .bash_profile echo $PATH adt -version ※Flash Professional CS6にAIR3.2が含まれているので、  そのパスをPATH環境変数に含めています。 12年9月30日日曜日
  • 19. 07 First HelloWorld 最初のHelloWorld ADC記事の通りにやってみる ネイティブ拡張(Native Extensions)入門 第2回 ネイティブ拡張の開発方法 前編 (by 有川 榮一氏) http://adobe.ly/PFq3sx (中盤の図8あたりから) 手順は、MUSHIKAGO APPS MEMO を参照。 1.Cocoa Touch Static Library(.a)の作成 2.ネイティブ拡張ActionScriptライブラリ(.swc)の作成 3.library.swfの抽出 4.証明書ファイル(.p12)の作成 5.ネイティブ拡張記述ファイル(.xml)の作成 6.ADTコマンドを使ってANEファイル(.ane)を作成 7.Flash ProfessionalのAIR for iOS(.ipa)でANEを使用 12年9月30日日曜日
  • 20. 注意点 次の3箇所のextensionIDは統一 •HelloWorldANE_ASLIB.swc内の ExtensionContext.createExtensionContext("mushikago.ane.HelloWorld", "type") •extension.xml内の <id>mushikago.ane.HelloWorld</id> •FirstHelloWorld_FlashPro-app.xml内の <extensions> <extensionID>mushikago.ane.HelloWorld</extensionID> </extensions>  ※ここは、Flash Proの場合、ANEを読み込むと自動的に書いてくれます。 最新 iOS SDKの指定 Flash Proの場合、AIR for iOS設定ダイアログ内に指定する「iOS SDK」という欄があります。 ➡/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/ Developer/SDKs/iPhoneOS5.1.sdk  ※Flash Proの場合、この指定をしないでパブリッシュすると、アプリ起動時にクラッシュします。 12年9月30日日曜日
  • 21. 【DEMO】 - 07 01 ネイティブ拡張 (ANE) に挑戦 12年9月30日日曜日
  • 22. iOS Dev Center 解説 いろいろやる前に確認 iOS Dev Centerへの登録やiTunes Connectでのアプリ登録が必要です。 https://developer.apple.com/ MUSHIKAGO APPS MEMO http://b.mushikago.com/ • 日本のApple StoreでiOS Developer Programを購入し Activateするまでの全スクリーンショット http://mushikago.com/i/?p=917 • iOS Dev Centerの事や証明書(.p12)と プロビジョニングプロファイル準備 ∼解説の解説の解説 http://mushikago.com/i/?p=306 • iOS Dev Center : App Storeから配布(Distribution)するまでのMEMO http://mushikago.com/i/?p=563 12年9月30日日曜日
  • 23. アプリ内課金とは (In-App Purchase) 12年9月30日日曜日
  • 24. プログラミングガイド In App Purchase プログラミングガイド iOS Developer Library 日本語に翻訳されたiOSのドキュメントです。 http://bit.ly/MWq8YE In App Purchase プログラミングガイド http://bit.ly/PMTzy5 12年9月30日日曜日
  • 25. フレームワーク Store Kitフレームワーク In-App Purchaseは、Store Kitフレームワークを使用して アプリケーションに実装します。 12年9月30日日曜日
  • 26. どんなことができるの? たとえば、 In-App Purchaseを使用して次のようなシナリオを実装できます。 ✦ 基本バージョンにプレミアム機能が追加されたアプリケーション ✦ ユーザが新しい本を購入してダウンロードできるブックリーダーアプリケーション ✦ 新しい環境(レベル)の購入を提案するロールプレイングゲーム ✦ プレーヤーが仮想の不動産を購入できるオンラインゲーム buy ※In-App Purchaseが行うのはペイメントの受け取りのみです。 12年9月30日日曜日
  • 27. プロダクト Storeで販売する機能はすべてプロダクトです。 プロダクトは、デベロッパが新規 アプリケーションを作成するのと同じ方法で、iTunes Connectを 通してApp Storeに関連付けられます。 In-App Purchaseを使用して販売できるプロダクトは、次の4つがサポートされています。 ✦コンテンツ (Content)。 アプリケーションで提供できる電子書籍、雑誌、写真、アート作品、ゲー ムのレベルと登場人物、その他 のデジタルコンテンツを含みます。 ✦機能 プロダクト(Functionality Product)。 アプリケーションですでに提供済みの機能をロック解除 したり、拡張したりします。たとえば、あるゲー ムを出荷する際に、ユーザが購入できる、より 小さな単位のゲームを複数同梱して出荷することが考えら れます。 ✦サービス (Service)。 たとえば、音声のテキスト化などの一度限りのサービスをユーザに請求でき ます。1回のサービス利用に つき、個々の購入が発生します。 ✦定期購読 (Subscription)。 コンテンツやサービスを継続的に利用できるようにします。たとえば、 アプリケーションから金融情報や オンラインゲームのポータルへのアクセスを1ヶ月単位で提供 するなどが考えられます。 12年9月30日日曜日
  • 28. 留意すべき重要なガイドライン 留意すべき重要なガイドライン ✦ アプリケーションの中で提供できるのは電子商品または電子 サービスに限られています。In-App Purchaseを使って実物 の商品やサービスを販売することはできません。 ✦ 中間通貨のようなアイテムを提供することはできません。これ は、特定の商品やサービスを購入するということがユーザに 認識されることが重要であるためです。 ✦ 販売用に提供するアイテムには、ポルノ、 謗、中傷、ギャン ブル(ギャンブルのシミュレーションであれば問題ありません) や、それらに関連するようなものを含めないようにします。 12年9月30日日曜日
  • 29. プロダクトID App Storeへのプロダクトの登録 App Storeはさまざまな種類のプロダクトに対応しています。 ✦Consumable(消耗型) 毎回購入 ✦Non-consumable(非消耗型) 永久に入手(機能制限解除もの) ✦Auto-renewable subscriptions(自動更新購読) レンタルのように期限付き ✦Free subscriptions(無料購読) ✦Non-renewing subscriptions(非更新購読) 12年9月30日日曜日
  • 30. 08 Xcode InAppPurchase Xcodeで作ってみる プログラミングガイドの通りにやってみる 「アプリケーションへのStoreの追加」の項 http://bit.ly/PMTzy5 (20ページ∼24ページ) 手順は、MUSHIKAGO APPS MEMO を参照。 1.XcodeのテンプレートからシンプルなiPhoneアプリを作る 2.StoreKitフレームワークをプロジェクトに追加 3.InAppPurchaseManagerクラスを作成 4.「Buy」ボタンを用意し、押すと課金処理開始 5.シミュレーターで動作確認し、invalid product identifierを確認 6.iTunes Connectでアプリ内課金用のプロダクトを準備 7.再度シミュレーターで動作確認し、購入ダイアログを確認 12年9月30日日曜日
  • 31. 実機でテストする際の注意 アプリ内課金の購入テストするときは Test User を使う事。 Test Userは、iTunes Connectの Manage Users で作成できます。 また、実機でサインイン中のアカウントをサインアウトするには、 設定>Store から最下部のApple ID欄をクリックします。 Test User 12年9月30日日曜日
  • 32. 【DEMO】08 アプリ内課金に挑戦 (Xcode編) 12年9月30日日曜日
  • 34. 誰か助けて! ANEは買えます。 「今すぐにでもAIRアプリにアプリ内課金を実装したい」場合 Milkman Games In-App Purchase iOS Extension $49.99 http://www.milkmangames.com/ 12年9月30日日曜日
  • 35. 09 Hello Milkman FlashPro Milkman Games StoreKit http://www.milkmangames.com/ com.milkmangames.extensions.StoreKit.ane を使ってみる 当然ながら、これを使うにはANEを購入する必要があります。 参考: ADC記事:Using the iOS In-App Purchase native extension for Adobe AIR http://adobe.ly/NXG0Jp 手順は、MUSHIKAGO APPS MEMO を参照。 1.Flash Pro CS6でAIR for iOSの新規ファイルを作成。 2.extensionフォルダをFLAの階層にコピー。 3.ActionScript設定ダイアログでaneを追加。 4.フレームスクリプトにActionScriptを入力。 5.パブリッシュして実機で確認。 12年9月30日日曜日
  • 36. 【DEMO】09 Milkman Games StoreKit 12年9月30日日曜日
  • 38. リンケージオプション 前回作ったANEのHelloWorldアプリを使って iOS標準のコントロールやフレームワークを使ってみる。 (iOS SDK 4.2で利用可能なパブリックフレームやiOS SDK 5 以降のデフォルト以外のもの) ネイティブ拡張パッケージの作成 http://adobe.ly/P1ZVHh -platformoptions フラグは、iOS フレームワークに対して デフォルト以外のリンケージオプションを指定する場合に使用する オプションの項目です。 iOS ネイティブライブラリとリンケージオプションファイルの説明 http://adobe.ly/NqfQxU MacOSのみ 12年9月30日日曜日
  • 39. -platformoptions フラグ Xcode Flash Builder Flash Pro Text Editor Text Editor 抽出 ●●.a ●●.swc library.swf ●●.p12 ●●.xml ●●.xml ネイティブ拡張 ネイティブ拡張 証明書ファイル ネイティブ拡張 リンケージ ライブラリ ActionScriptライブラリ 記述ファイル オプションファイル ターミナル adt ●●.ane ANEファイル 12年9月30日日曜日
  • 40. ADT (AIR Developer Tool) ADTコマンドの例:リンケージオプションを指定する場合 adt -package -storetype pkcs12 -keystore mykey.p12 -target ane SecondHelloWorldANE.ane extension.xml -swc HelloWorldANE_ASLIB.swc -platform iPhone-ARM library.swf libHelloWorldANE.a -platformoptions myplatformoptions.xml ※上記は本来一行で改行しません。 ※黄色文字は任意のファイル名 ※桃色文字は抽出したままのファイル名 12年9月30日日曜日
  • 41. リンケージオプションファイル iOS のリンケージオプションファイル (.xml) <platform xmlns="http://ns.adobe.com/air/extension/3.1"> <sdkVersion>5.1</sdkVersion> <linkerOptions> <option>-framework MapKit</option> <option>-framework StoreKit</option> </linkerOptions> </platform> 12年9月30日日曜日
  • 42. 13 Second HelloWorld 2回目のHelloWorld ANEを使って、 UISwitch、UIButton、MKMapViewを表示してみる。 参考:FxUG → http://bit.ly/MQMdZb 手順は、サンプルファイル を参照。 1.「10_HelloWorldANE_EXLIB」GetHelloWorld内のみ書き換え。 2. Mapkitの#importを忘れずに。 3.「11_PlatformOptionXML」リンケージオプションファイル作成。 4.「12_adt2」 -platformoptionsをつけてADT。 5.「13_SecondHelloWorld_FlashPro」GetHelloWorldを呼ぶ。 12年9月30日日曜日
  • 43. 【DEMO】 - 13 10 ANEでデフォルト以外のフレームワークを使用 12年9月30日日曜日
  • 44. 16 Third HelloWorld 3回目のHelloWorld ANEを使ってアプリ内課金 アプリ内課金(In-App Purchase)も デフォルト以外のフレームワークなので、同様に。 手順は、サンプルファイル を参照。 1.「14_HelloWorldANE_IAP」GetHelloWorld内のみ書き換え。 2. InAppPurchaseManager.hの#importを忘れずに。 3. 同様に「15_adt3」 -platformoptionsをつけてADT。 4. アプリIDを「com.mushikago.InAppPurchaseXcode」に。 5.「16_ThirdHelloWorld_FlashPro」GetHelloWorldを呼ぶ。 12年9月30日日曜日
  • 45. 注意点 アプリケーションIDとプロダクトIDの関係 com.mushikago.InAppPurchaseXcode.unLockという プロダクトを購入するサンプルになっているので、Flash Proでパブリッシュする際の アプリケーションID欄にも注意してください。 ➡ com.mushikago.InAppPurchaseXcode Non-consumable(非消耗型)は一度のみの購入 Non-consumable(非消耗型)のプロダクトの場合、一度購入してしまうと、 2度目以降は、そのユーザでのテストができなくなります。 その場合は、テストユーザを増やして新規のテストユーザで購入テストをしてください。 12年9月30日日曜日
  • 46. 【DEMO】 - 16 14 ANEでアプリ内課金(In-App Purchase) 12年9月30日日曜日
  • 47. ANEからのイベント(非同期) ANE側でイベントを発行してFlash側で受け取る。 参考:AIR 3 Native Extension 12 Try Develop Async Event in C (by 有川 榮一氏) http://bit.ly/MrrLdk FREDispatchStatusEventAsync(ctx,msg1,msg2); context.addEventListener(StatusEvent.STATUS, onStatusEvent); function onStatusEvent(event:StatusEvent):void{ trace(event.code,event.level); dispatchEvent(event); } 12年9月30日日曜日
  • 48. イベントの流れ ネイティブ拡張 ライブラリ FREDispatchStatusEventAsync addEventListener ネイティブ拡張 ActionScriptライブラリ dispatchEvent(event) addEventListener AIRアプリケーション本体 12年9月30日日曜日
  • 49. 20 Fourth HelloWorld 4回目のHelloWorld ANEでイベントを発行。AIRアプリで受け取ってみる。 参考:AIR 3 Native Extension 12 Try Develop Async Event in C (by 有川 榮一氏) 手順は、サンプルファイル を参照。 1.「17_HelloWorldANE_EVENT」 FREDispatchStatusEventAsync 2.「18_HelloWorldANE_Event_ASLIB」StatusEvent 3.「19_adt4」 -platformoptionsをつけてADT。 4.「20_FourthHelloWorld_FlashPro」StatusEventを受け取る。 12年9月30日日曜日
  • 50. 【DEMO】 - 20 17 FREDispatchStatusEventAsync 12年9月30日日曜日
  • 51. 23 Fifth HelloWorld 5回目のHelloWorld アプリ内課金の課金結果に応じて、動作を振り分ける。 StatusEvent.code を StatusEvent.level の 2つのパラメータを駆使して、結果を振り分けてみます。 この例では、購入成功した場合、codeとlevel部分に入る値は •code : Purchased •level : 購入したプロダクトID 手順は、サンプルファイル を参照。 1.「21_HelloWorldANE_EVENT2」 状態をcodeとlevelで振り分け 2. appMng.myContext = ctx;を忘れないように。 3.「23_FifthHelloWorld_FlashPro」StatusEventを受け取る。 12年9月30日日曜日
  • 52. 【DEMO】 - 23 21 結果の振り分け 12年9月30日日曜日
  • 53. 購入済みの記録 一度購入されたプロダクトは記録して、 次回起動時以降は、ロック解除された状態にする。 暗号化してローカル保存 EncryptedLocalStore var storedValue:ByteArray = EncryptedLocalStore.getItem("PurchasedProdID"); storedValue.readUTFBytes(storedValue.length) 12年9月30日日曜日
  • 54. 24 Fourth HelloWorld 6回目のHelloWorld 5回目のHelloWorldで取得した 購入成功 のメッセージ を受け取り、プロダクトIDを暗号化して保存してみる。 暗号化されたローカルストア 参考:http://adobe.ly/PKFjnb 手順は、サンプルファイル を参照。 1.「24_SixthHelloWorld_FlashPro」 購入処理後、暗号化して保存。 12年9月30日日曜日
  • 55. 【DEMO】24 暗号化してローカル保存:EncryptedLocalStore 12年9月30日日曜日
  • 56. 以上 ネイティブ拡張(ANE)を使って Adobe AIRアプリに アプリ内課金を実装してみる 12年9月30日日曜日
  • 57. つづきは MUSHIKAGO APPS MEMO で。 http://b.mushikago.com/ 虫カゴデザインスタジオ株式会社 白石 哲也(しらいし てつや) twitter : @mushikago facebook : http://facebook.com/mushikago      : http://facebook.com/mushikago.inc web : http://mushikago.com/ 12年9月30日日曜日