Measurement Protocol の 送信プログラム実装時の注意点について


最近、Measurement Protocol を サーバー側のプログラムから送信する記載がありました。
実装時に、何点がうまくいかなかったところがありましたので、記載します。


注意点

  • Hit Builder を使って、Query を作成して、テスト送信する
    Measurement Protocol の Query を作成、テスト送信ができる Hit Builder — Google Analytics Demos & Tools というツールがあります。 プログラム側で送信しようとしている Query が Google Analytics に記録されるかチェックできます。
    ここで送信して、記録されないクエリは、プログラムから送信しても記録できません。

  • Hit Builder での検証が完了したら、ヒットの検証をする
    ヒットの検証 - Measurement Protocol  |  アナリティクス Measurement Protocol  |  Google Developers に記載がありますが、https://www.google-analytics.com/debug/collect に Measurement Protocol を送信すると、送信内容の検証ができます。検証結果が返却されますので、エラー、警告が出ていないか確認できます。
    python request を使用しているのであれば、以下で、検証結果を、標準出力できます。

        # Measurement Protocol に 送付するパラメータを生成    
        payload = {"v": "1",
                   "t": "event",
                   "tid": "UA-XXXXXXXX-X",
                   "cid": cid,
                   "ni": "1",
                   "dl": json_dict.get("document-uri", ""),
                   "ec": "CSPReport",
                   "ea": json_dict.get("violated-directive", ""),
                   "el": json_dict.get("blocked-uri", ""),
                   "ua": request.META.get('HTTP_USER_AGENT', ''),
                   "z": random.randint(0, 99999),
                   "ds": "WebApp",
                   "ul": request.LANGUAGE_CODE
                  } 
        r = requests.post("https://www.google-analytics.com/dubug/collect", payload)
        print(r.text)
    

  • ClientID が、取得できない場合は、uuid で生成する
    Google アナリティクスのデータ収集上限  |  Google Developers にデータ収集上限が記載されていますが、セッション 1 回 あたり 500 イベントまでの上限があります。通常この制限を超えることは稀かと思いますが、Measurement Protocol で 同一の ClientID を使用している場合は、この制限に抵触します。
    Cookie から ClientID が取得できる場合は、値を取得できない場合は。uuid を生成して設定するのがよいかと思います。

  • User Agent を設定する場合は形式を確認する
    Measurement Protocol のパラメータ リファレンス  |  アナリティクス Measurement Protocol  |  Google Developers に記載がありますが、独自形式のユーザーエージェントが設定していると、記録されない場合があるようです。
    python の requests の ユーザーエージェントは、python-requests/1.2.0 のような形式で、そのまま使用すると、Measurement Protocol の求めるユーザーエージェントの形式ではない可能性があります。
    試しに送付してみて、記録されないようであれば、ユーザーエージェントの文字列を変更してみましょう。

  • Google Analytics の フィルターの除外設定と合致するリクエストになっていないか?
    これに気づかずに、しばらく悩んでしまいました。
    Google Analytics 側の フィルター設定に合致すると、そのフィルターが Measurement Protocol にも適用されます。
    リファラーの値で除外していたり、ユーザーエージェントで除外していたりすると、除外設定にヒットして記録されなくなります。
    フィルターをかけない VIEW で送信確認は行ったほうがいいかもしれません。


参考

記事上に記載していませんが、ユーザーエージェントについて、以下参考になりました。

以上です。

コメント