Edited at

LINE@に友達登録した人のアクセス元を特定(トラッキング)する方法

More than 1 year has passed since last update.


誰得の記事なのか


  • LINE@へ友達登録してくれた人がどこから来たのか特定し、効果測定したい人

  • LINE@に友達登録させてくれた人に対してインセンティブを付与したい人


概要

色々やり方はあるのですが、一番ポピュラーな方法としてCookieを用いたトラッキング法をご紹介します。

ブラウザでCookie食わせた後に突き合わせて特定するという原始的な手法です。

ブラウザを使わないFingerPrintとか、もっとクールな方法があったら是非コメント欄などで教えて欲しいです :bow:


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を作成する


SetCookie.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.

qrcode.jpg


3.Cookie取得用PHPを作成する


GetCookie.php


<?php
$get_id = $_COOKIE['id'];
print "君は{$get_id}のフレンズなんだね!";



4.Cookie取得用PHPをLINEから踏ませる

URLが見えてしまうとアレなので、UriTemplateActionBuilderなどを使ってButtonでリンクさせるとよりbetter.


LineBot.php


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方式がいいかなと思い、断念しました。