誰得の記事なのか
- LINE@へ友達登録してくれた人がどこから来たのか特定し、効果測定したい人
- LINE@に友達登録させてくれた人に対してインセンティブを付与したい人
概要
色々やり方はあるのですが、一番ポピュラーな方法としてCookieを用いたトラッキング法をご紹介します。
ブラウザでCookie食わせた後に突き合わせて特定するという原始的な手法です。
ブラウザを使わないFingerPrintとか、もっとクールな方法があったら是非コメント欄などで教えて欲しいです
OSごとの仕様の違い
iOS版LINE
- LINEのQRコード機能で画像読み取り、LINE以外のURLだった場合、LINE 内 WebブラウザでQRコードのURLを開く。
- LINE内メッセージでURLを選択すると、LINE 内 WebブラウザでURLを開く。
Android版LINE
- LINEのQRコード機能で画像読み取り、LINE以外のURLだった場合、LINE 外 WebブラウザでQRコードのURLを開く。
- LINE内メッセージでURLを選択すると、LINE 内 WebブラウザでURLを開く。
iOS版とAndroid版で挙動が異なるため、単純なやり方ではうまくいきません。
解決策として、URLクエリにopenExternalBrowser=1をつけることで、強制的に外部ブラウザを使用させ、UAやCookieを扱うことができます。
やり方
1.Cookie食わせ用PHPを作成する
<?php
$set_id = $_GET['id'];
setcookie('id', $set_id);
//$_SESSION['id'] = $set_id;//SESSIONもセットしておくとよりbetter
//ここらへんでUserAgentやIPとってDBに保管しておくとよりbetter
//LINE友達登録用URLにリダイレクト
$line_friend_url = "https://line.me/R/ti/p/hogehoge";
header("Location:" . $line_friend_url);
2.Cookie食わせ用PHPのQRコードを作成する
デザインQRコードジェネレーターを使うとそれっぽくなります。
goo.gl等の短縮URLを経由させるとよりbetter.
3.Cookie取得用PHPを作成する
<?php
$get_id = $_COOKIE['id'];
print "君は{$get_id}のフレンズなんだね!";
4.Cookie取得用PHPをLINEから踏ませる
URLが見えてしまうとアレなので、UriTemplateActionBuilderなどを使ってButtonでリンクさせるとよりbetter.
function do_get_cookie()
{
$url = "https://hoge.com/GetCookie.php?openExternalBrowser=1";//openExternalBrowser=1が重要
$actions = array(
new \LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder("ボタン", $url),
);
$title = " タイトル";
$message = "メッセージ";
$thumbnail = NULL;
$button = new \LINE\LINEBot\MessageBuilder\TemplateBuilder\ButtonTemplateBuilder($title, $message, $thumbnail, $actions);
$messageBuilder = new \LINE\LINEBot\MessageBuilder\TemplateMessageBuilder($message, $button);
$response = $this->bot->replyMessage($this->replyToken, $messageBuilder);
}
FAQ
Q.LINE Login使えばいいんじゃね?
とも思ったのですが、審査が厳しいってのとUserにLoginさせる手間が煩雑ということで断念しました。
Q.ProfileのpictureUrlをユニークキーにしたらいいんじゃね?
とも思ったのですが、 LINEで画像登録していないUserの場合レスポンスJSONに含まれない仕様のため、断念しました。
Q.UserAgentとIPあれば十分じゃね?
とも思ったのですが、精度を求めるとやはりCookie方式がいいかなと思い、断念しました。