Android」カテゴリーアーカイブ

PhonegapアプリにAdobe Mobile SDKを入れる

まずはMac上でPhonegapアプリを作るところから始めた。

ググると結構古い情報がヒットして困ったが、Phongegapの中身はCordovaなので、Cordovaの環境を揃えれば良いそうだ。

Xcodeはインストール済みだったので、
Xcodeコマンドラインツールを入れる。

あと、gitもインストール済みなので、そのまま使う。

で、今度はNode.jsを入れる。
node.jsに含まれるnpmコマンドを使うためである。
https://nodejs.org/en/

そしてcordovaをインストールする

$ sudo npm install cordova -g

インストールしたら、早速テストプロジェクトを作る

$ cordova create test-project

そしてiOSとAndroidのプラットフォームを追加

$ cordova platforms add ios
$ cordova platforms add android

そうするとtest-project/platforms配下にiosとandroidというディレクトリがそれぞれ出来上がるので、それらをbuildしたのち、エミュレーターで起動できます。

$ cordova build ios
$ cordova emulate ios

というわけで、次はAdobeのSDKを入れます。
管理画面からPhonegap pluginというのもダウンロードしておきます。
https://marketing.adobe.com/resources/help/en_US/mobile/ios/phonegap.html
最初はiOS。通常のiOSアプリと同じくADBMobileライブラリとADBMobileConfig.jsonをプロジェクトに追加します。

そして、ADBMobile_PhoneGap.h と ADBMobile_PhoneGap.m プロジェクトのpluginsフォルダにコピー。

それから、test-project/platforms/ios/www にPhonegapプラグインに含まれるADBHelpler.jsをコピーする。

で、config.xmlに下記の要素を貼り付けるとあるが、config.xmlがプロジェクトのrootとplatforms/ios/の2箇所にあるんだが、どっちだ?
とりあえず両方に入れといたw

<feature name="ADBMobile_PhoneGap">
    <param name="ios-package" value="ADBMobile_PhoneGap" />
</feature>

ここまでやったら、次はADBHelper.jsの実装。
とりあえずwwwの中のindex.htmlに入れる。
閉じタグの直前に、ADBHelper.jsをインクルード。

<script type="text/javascript" charset="utf-8" src="ADB_Helper.js"></script>

あとは各ADB.trackStateをコールすればビーコンが飛ぶ、はずなのですが、どうやらCordovaアプリ内ではonDeviceReadyイベントが発生してからじゃないと制御出来ない。

で、とりあえずjs/index.js内でonDeviceReadyで実行されるコールバック関数があったので、その中にADB.trackStateを入れたら動いた

    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
        
        /* ここでAdobe Analyticsのコードを実行 */
        ADB.setDebugLogging(true);
        ADB.collectLifecycleData();
        //pageNameにHelloCordova、prop1にhogeをセット
        ADB.trackState("HelloCordova", {"&&c1":"hoge"}); 
    }

trackingServerへの送信ビーコンの中身はXcodeのコンソールに出てくるので、それで確認。
Phonegapプラグインがちゃんとpluginsフォルダにコピーされてないとプラグインが見つからないというエラーが出てきて怒られるので注意。

以上iOS

Androidも大体やる事は同じ。
https://marketing.adobe.com/resources/help/en_US/mobile/android/phonegap.html
しかしbuildしたらtargetが見つからないとかで怒られる。

$ cordova build android

というわけでAndroid SDK Managerを起動してもろもろバージョンアップしたりインストールしてretryしたら動いた。

Firebaseを試す (Android)

Firebase の Android 版も試しました。

ここらへんを参考
https://firebase.google.com/docs/analytics/android/start/
http://dev.classmethod.jp/smartphone/firebase-analytics-getting-started/

で、導入するためにまず Android Studio を 2.2 Preview にバージョンアップ。
2.2 以降じゃないと諸々不具合があるらしく、実は最初ハマった。。
あと、情報収集のために「firebase android」あたりのワードでぐぐると、古い情報がやたらヒットして困るので、Google Firebaseの公式docを読むのが吉。

iOS と違ってとくにビルド時の問題はなし。
で、肝心のFirebase Analyticsの分析機能はGoogle Analyticsのサブセットみたいなもんだった。
Firebaseはやはりプラットフォームであって、Analyticsはおまけ。

AndroidStudioのエミュレーター設定でつまづく

Eclipse+ADTプラグインからやっとAndroidStudioに乗り換えたが、Windows版でややつまづいたのでメモ。

AVDマネージャーでx86のエミュレーターを作ろうとして、「HAXMがインストールされてない云々」のエラーが。
で、手動でHAXMをインストールしたところ、

This computer meets the requirements for HAXM, but Intel Execute Disable Bit (XD) is not turned on. HAXM can be installed, but will not work until XD is enabled.

と言って怒られる。。
さんざんググって、コマンドプロンプトから管理者権限で以下のコマンドを実行して解決。

bcdedit /set nx AlwaysOn

これでx86エミュレーターも起動するようになりました。

Androidエミュレーターの-http-proxyオプションでクラッシュ

AndroidエミュレーターにHTTPプロキシを設定する場合は、オプションで -http-proxy を指定するのですが、なぜか会社のPCだとクラッシュするので調べました。

で、-no-audioオプションを付けたら起動した。

C:\Users\hoge> emulator -avd android_4_4 -http-proxy http://127.0.0.1:8888 -no-audio

The import android.support.v7.app cannot be resolved

Eclipseで空のAndroidアプリケーションプロジェクトをしたら、「The import android.support.v7.app cannot be resolved」などのエラーメッセージが出て怒られた。

eclipse

どうやら libs\android-support-v4.jar が邪魔している模様。

oldlibs

このandroid-support-v4.jarを削除したら解決しました。