シリコンバレーのマーケター日記

東京、シンガポールを経てシリコンバレーで働く、マーケター。英語、プログラミング、データ分析は次世代マーケターの必須スキルだと信じて進む。

クロスドメイン計測タグへの道:phpでブラウザにクッキーを付与する

色々見ていくと、キーワードは、iframe, phpのsession, htmlのform、のようなので、ひとまずphpのsessionの使い方を。

session_start()の前にsessionの名前とidを指定すると、それがクッキーとしてブラウザに記録されます。

<?php
session_name("kokochan");
session_id("123");
session_start();
?>

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

print('session name : ' .session_name(). '<br>');
print('session ID : ' .session_id(). '<br>')

?>

</body>

有効期限が、ブラウザのsessionが終了すると消えるとなっています。これでは困るので、有効期限も変えられるようにしないとです。

f:id:yuyutata:20160125012954p:plain

 

参考サイト

クロスドメインでcookie書き込む方法 +クロスブラウザで - webネタ

web計測タグをつくる:シングルドメイン編

さくらレンタルサーバーで、データベース設定もさくっとできたので、Analyticsで使うtracking tag (tracking pixel) をつくってみようと思い立った昨日。

 

やりたいこと

サイト訪問ユーザーにユニークなID(cookie value)を付与して、訪問回数、時間を記録する

 

アルゴリズム

1. ユーザーのブラウザにすでにCookieが付与されているか確認

2. 付与されていなければ、乱数でユニークなCookie valueをつくる(ちゃんとユニークかデータベースと確認)

3.生成したユニークなcookie valueをユーザーのブラウザに記録

4. 新たなcookie value, 訪問時間をサーバーに記録

4. すでにユーザーが過去にページへ訪問していてCookieが付与されている場合は、そのユーザーのユニークなCookie valueを抜いて、訪問時間とともにサーバーに記録

f:id:yuyutata:20160124130613p:plain

 

URL: 

http://yuyutata.com/landingpage.html

 

総括

自分のドメイン下では機能するのですが、他のドメインに埋め込むとクッキーが付与されませんでした。計測タグは一般的でなくてはいけません。どうやらiframeが解決の鍵のようです。来週は、クロスドメイン編をお届けできればいいな。

 

JavaScript - そのクロスドメインでcookie使えてますか? - Qiita

iframeを使ってクロスドメインでCookieを書き込む[iframe][sso] - Webの世界で虹を架ける

初めてのサーバー構築。AWS, サクラサーバーなど

Amazon Web Service (AWS) を使ってみました。アマゾンが副業で始めてたサーバー事業が今では2015年第三四半期だけで21億ドルの売り上げ。前年比78%の伸び。すごいっす。

Amazon Web Services generates $2.08B in revenue in Q3 2015, up 78% over last year | VentureBeat | Cloud | by Jordan Novet

 

というわけで、以下のLIGの記事に従って、AWSの仮想サーバーを構築していきます。記事はとてもわかりやすくて、従っていけば構築はできました。

わずか5分!? AWSのEC2でクラウドなウェブサーバーを構築してみた | 株式会社LIG

 

ただ、仮想サーバーは一から自分で色々インストールしていかなければならず、かなり難しく感じてます。。データベースの設定, MyPhpAdmin, SSLの設定(https通信)などなど泣きそう。

というわけで、Amazon Japanから本が届くまでは、AWSは放置して、仮想サーバーではなく、レンタルサーバーを使うことにしました。

VPSサーバとレンタルサーバの違いを比較してまとめてみた | NEZU.log

 

余談ですが、アマゾンの海外発送、シンガポールまでたったの1400円。普通にシンガポールで洋書を買うよりもアマゾンジャパンで買って海外発送したほうが安い場合もあります。アマゾンのロジスティクス、まじやばい。

 

ずっとローカルでMAMPを使ってやっていましたが、色々公開していければと思います。良い週末を!

 

注文した本

X code7にupdateした結果。

最近は、ウェブ系ばかりでアプリをいじってなかったので、CocoaPods導入とともにX code7にアップデートしました。その結果。

1. Swiftから、Swift 2.0に言語が変わっていた

2. その結果、SwiftのラッパーであるSwiftData(以前の記事)がエラーで動かない

GitHubを見た感じ、みんな同じ壁にぶつかっていたようです。

Issues · ryanfowler/SwiftData · GitHub

 

もしくは、RealmというSQLiteにかわるモバイルデータベースを新たに勉強するのも手のようです。

 

ってな感じです。

ついでに Apple Developer Program - Apple Developer に登録したのですが、うまくできず。。いまcontactにお問い合わせしております。 

なんだか前に進めない夜でした。

 

追記:contactに問い合わせたら次の日の朝(約10時間後)に対応して頂きました。アップルのカスタマーサポート体制、できる。シンガポールにあるという噂。

CocoaPods②:使う

完全に中間管理職なもので、上司の上司のアメリカ人、上司のオーストラリア人、部下のインド人の中での力学が最近あまりうまく機能していません。結局、直属の上司よりも最終的に組織のトップにどう思われるかが重要なんだなと、思っています。めんどくせー。プログラミングが気晴らしになってる笑

 

昨日はターミナルでCocoaPodsをインストールするところまでいきました。今日は実際にCocoaPodsを使ってみようと思います。

CocoaPodsを理解するために、まずCocoa (Touch)を理解する。

Cocoa (Touch)とは

iOSを構成する4つのレイアーの最上位に位置する。iOS用アプリを作成するうえでキーになるフレームワークから構成されている。このレイヤーの中心となるのが、UIKitフレームワーク。

CocoaPodsとは

"CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over ten thousand libraries and can help you scale your projects elegantly. CocoaPods is built with Ruby and is installable with the default Ruby available on OS X. "

"Swift/ Objective-CのCocoa(Touch)プロジェクトのためのライブラリ管理ツール。一万を超えるライブラリーがエレガントにあなたのプロジェクトを手助けします。CocoaPodsはRubyで構築されており、OS XにはRubyがデフォルトでインストールしてあるぜ" 

 ということらしいのだが、いまいち腑に落ちないので使ってみる。

1. xCodeのプロジェクトのディレクトリまで行って、以下のコマンドを叩く

$ pod init 

2. Podfileというファイルが生成されるので、そのファイルをtext editorで開く

f:id:yuyutata:20160119010644p:plain

3. プロジェクトにインストールしたいライブラリー名を以下のように付け足す(ここでは”SwiftyJSON”を入れてみる)

4. user_frameworks!を以下のように追加

use_frameworks!

target 'Cocoa_Test' do

pod 'SwiftyJSON'

end

target 'Cocoa_TestTests' do

end

target 'Cocoa_TestUITests' do

end 

 4. ターミナルで実行

$ pod install 

 5.  フォルダに新しく.workspaceファイルができているので、これを開く

f:id:yuyutata:20160119012732p:plain

無事、SwiftyJSONライブラリーがxcodeのプロジェクトファイルに入っていました。

 

総括

ようは、以前Google News APIをつかったアプリの記事のときに、GitHubでダウンロードして、プロジェクトファイルへコピペしていたところを、ターミナルから一発でできるぞ。ってのが、CocoaPodsのメリットと理解しました。めっちゃ便利やん!とまでは身に染みていませんが、謎が一つ解明されて良かったです。

CocoaPod①:未知との遭遇。インストールする。Inuxのコマンドも。

今日見つけたアプリ計測ツールのSDKを導入しようと思ったら、以下の表記。

Installing the SDK via the iOS CocoaPod automates the majority of the installation process for you. Before beginning this process please ensure that you are using Ruby version 2.0.0 or greater.

CocoaPodって、Rubyってなんだ。ということで2016年も未知との遭遇。

  • CocoaPodは、iOSアプリ向けのライブラリーを管理するもので、Rubyで書かれている
  • Macには最初からRubyが入っている
  • CocoaPodのインストールはターミナルを使って行う
  • ターミナルとは、UNIXベースのMac OSをコマンドラインを叩くことでコントロールするためのアプリケーション

ということがわかったので、まずはターミナルの勉強。ようは、マックブックさんとの意思の疎通をマウスを使わずにコマンドを打つことで行うということでしょう。

f:id:yuyutata:20160118013619p:plain

 

sudo: 指定したユーザーでコマンドを実行する

cd: ディレクトリ間を行き来する

cd ../ : 一つ上のディレクトリへ移動

ls: 現在いるディレクトリの中身を表示

pwd: 自分がどのディレクトリにいるかの確認

vim ファイル名: ファイルを作成

sudo vim ファイル名: ファイルをターミナル内で編集

 

1. まずはMacに入っているRubyのバージョンを確認

以下のようにコマンドを叩くと

$ ruby --version  

結果がでました。2.0.0だったのでひとまずok。

koko 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14] 

2. Rubyを最新のものにアップデート

Rubyをアップデートするには、以下のrbenvというコマンドをつかうようだが、そのためには、Homebrewをインストールしていないといけないらしく。わけもわからず、以下のページからコマンドをターミナルにコピペする。

Homebrew — OS X 用パッケージマネージャー

そして、以下のコマンドを打つと、無事にバージョン 2.1.2のRubyをインストールできました。

$ rbenv install 2.1.2

 

2.CocoaPodsをインストールする

Rubyを使うと簡単にパッケージをインストールすることができるそうです。公式サイトの手順に従ってやってみます。

sudo gem install cocoapods

sudo: パソコンに設定しているpass wordが求められます。

gem install: Ruby用のパッケージ管理システムであるRubygem(ジェム)のコマンドで、簡単にインストールできる。コマンド一覧

 

総括

できました。が、インストールできたのは良いものの、いまだCocoaPodsがなんなのか全くわかっていません。未知と遭遇しても怯まない精神力は2015年の収穫です。しゅくしゅくと。

乱数でCookieIDを付与してデータベースに保存する

やりたいこと:クッキーIDを乱数で付与して、データベースに送る

Step.1: 0-1,000,000の乱数を発生させて、Cookieのvalueに入れる

function cookie() {
var val = Math.round( Math.random()*1000000 );
$.cookie('NAME',val, {expires:1,path:'/'});

Step.2: 作ったIDをひとまずtext boxに入れる

HTML

    <input type="text" name="cookie"> 

JavaScript

function view() {
$.cookie('NAME');
var value = $.cookie('NAME');

$("input[type=text][name=cookie]").val(""+value+"");
}

 

Step.3: IDをAjaxを使ってphp経由でデータベースに格納する

HTML

    <button>Submit cookie!</button> 

JavaScript

<script>
$(document).ready(function(){
$('button').click(function(){
$.ajax({
url: "cookie_reciever.php",
type: 'GET',
data: {

value: $("input[type=text][name=cookie]").val(),

},
})
.done(function(data){

alert(data);

})

.fail(function(data){
alert('ajax fail');
});
return false;
});
});
</script>

Step.4: Phpで、クッキーIDを受け取って一応、データベースにないか確認をして無ければ、新たに格納する

<?php

mysql_connect('localhost','root','root') or die(mysql_error());
//echo 'database connected';
mysql_select_db('Cookie_test') or die(mysql_error());
//echo '</br>Database HPM selected';
mysql_query('SET NAMES UTF8');

$value = $_GET['value'];

echo "'$value'";

$result = mysql_query('SELECT * FROM Cookie1 WHERE value="'.$value.'"');

$count = mysql_num_rows($result);
if(!$count) {

$sql = "INSERT INTO Cookie1 (value) VALUE ('$value')";
mysql_query($sql);

} else {

$emparray = array();

while ($data = mysql_fetch_array($result)){

$emparray = $data;

}
echo ("すでに存在しています");
}
?>

 以上です。

以下のように、テキストボックスに乱数で発生させたクッキーIDを入れて、"Submit Cookie!"ボタンを押すと、Ajaxを使ってphp経由でデータベースに格納されます。

f:id:yuyutata:20160116201638p:plain

もしも、すでにそのクッキーIDが存在している場合は、以下のようにアラートがでます。

f:id:yuyutata:20160116201902p:plain

 

総括

久しぶりでしたが、意外と手が動きました。今はまだcookie IDひとつしかやり取りしてませんが、ここから送る・受け取る値が増えるとJSON形式でやり取りしなくてはならないので、ハマりそうでちょっとこわいー。では、夕飯に行ってきまーす。

 

次回やりたいこと

クッキーがすでにあるか、クッキータグをブラウザから抜き出して条件分けする

  • If yes: 既存クッキーIDと閲覧URL, 閲覧時間などの情報をDBに入れる
  • If no: 新規クッキーIDを付与する(乱数でクッキーIDをつくって、DBにかぶってないか確認し、かぶっていれば再度、乱数でクッキーIDを吐く)