月別アーカイブ: 2016年7月

FedoraにSquidをインストール

外部から接続できるプロキシサーバーをSquidで構築した。
固定IPのVPSサービス上で、常に同じIPアドレスからWebブラウジングするためのプロキシなので、キャッシュはなくて、フォワードのみ。
ノーガードすぎるのもあれなので、BASIC認証をかけておく。

OSはFedora 22

$ dnf -y install squid

BASIC認証を使うので、httpd-toolsも入れる。

$ dnf -y install httpd-tools

それから /etc/squid/squid.conf を編集する。

$ cd /etc/squid
$ vi squid.conf

ほぼデフォルトなんだけど、インターネットからのアクセスを全部許可するのと、BASIC認証の設定を追加

#インターネットからのアクセスを定義
acl allnet src 0.0.0.0/0.0.0.0

#BASIC認証の設定
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 5 hours
acl password proxy_auth REQUIRED
http_access allow password

#インターネットからのアクセスを許可
http_access allow allnet

#Forwarded_forヘッダの送出をオフ
forwarded_for off

#ホスト名を追加
visible_hostname hoge.kwonline.org

#deny all をコメントアウト
#http_access deny all

BASIC認証に使うパスワードを作成する。
orenomemoというユーザー名を追加。

$ htpasswd -c /etc/squid/.htpasswd orenomemo

パスワードを2回入力したら設定は以上、で、Squidを起動する。

$ systemctl start squid
$ systemctl enable squid

あれ?・・・エラーが出て起動しない。
systemctlのログを確認してみる。

$ systemctl status squid.service -l

/usr/sbin/squid: error while loading shared libraries: cannot restore segment prot after reloc: Permission denied

SELinuxが有効になってるのが原因なので、とりあえず設定を変えておく。

$ /usr/sbin/setenforce 0

ただこれだと再起動時にまたSELinuxの設定が戻ってしまうので、
/etc/selinux/configを編集して、SELINUX=permissiveに変える。

$ vi /etc/selinux/config

SELINUX=permissive

で、無事起動。
そしてブラウザからプロキシ設定を追加してみたが、接続出来ませんのエラー。
firewalldが原因だった。
というわけで設定を見直す。

$ firewall-cmd --permanent --add-service=squid
$ firewall-cmd --reload

これで3128ポートでSquidプロキシが動いた。

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したら動いた。