Google Analytics e コマースを利用する際の注意事項とアプリ内収益がマイナスになっちゃう原因

android appでGoogle Analytics SDKのe コマースを使う際、
Google Analytics Ecommerce Tracking - Android SDK
https://developers.google.com/analytics/devguides/collection/android/v2/ecommerce
にexampleがあるんですが、
これがまともに動かないというかマイナスになるような数値が
通知されてしまうようなので
いろいろ調べた結果のコードをのせておきます。


例えば

  オーダーID N00012345
  合計価格8000円
  税金400円
  送料350円
  商品A
        カテゴリ 食品
        SKU L_123456
        単価2000円
        個数 2個   
  商品B
        カテゴリ コスメ
        SKU M_7890AB
        単価4000円
        個数 1個   

の場合、

Transaction myTrans = new Transaction.Builder(                 
	      "N00012345",                                   //オーダーID
	       (long) ((long)8000 * 1000000) )               //合計金額
	      .setAffiliation("test android shopping")       //アフィリエイト情報があれば
	      .setTotalTaxInMicros( (long) ((long)400 * 1000000) )           //税
	      .setShippingCostInMicros( (long) ((long)350 * 1000000) )      //送料
	      .setCurrencyCode("JPY")                        //通過
	      .build();                                            
                                                               
myTrans.addItem(new Item.Builder(                            
	      "L_123456",                                    //商品SKU
	      "商品A",                                       //商品名
	      (long) ((long)2000 * 1000000),                 //単価
	       2)                                            //個数
	      .setProductCategory("食品")                    //カテゴリ
	      .build());                                           
                                                               
myTrans.addItem(new Item.Builder(                            
	      "M_7890AB",                                    //商品SKU
	      "商品B",                                       //商品名
	      (long) ((long)4000 * 1000000) ,                //単価
	       1)                                            //個数
	      .setProductCategory("コスメ")                  //カテゴリ
	      .build());                                           
Tracker myTracker = EasyTracker.getTracker(); // Get reference to tracker.
myTracker.sendTransaction(myTrans); // Send the transaction.
                                                               






金額を報告する際、
サンプルでは

(long) (2.16 * 1000000)

となってますが、これを日本円にしたいばっかりに2.16を8000円とかにしたりすると
マイナスの値がanalyticsの画面に表示されます。

要するに
(long) (8000 * 1000000)
を計算すると
8000はint値なので、これに1000000をかけると
-589934592の値になりますw
桁溢れというか、マイナスになっちゃうんですね。

なので、正しく報告するには

(long) ((long)8000 * 1000000)

と、8000をlong型にcastして1000000をかけるように
しないといけないようです。。。

そもそも$10000とか、数千円+銭の値を送ることは
exampleのままでは送れないから
floatなりにしないとダメでしょうね

なので、正しくは

(long) ((float)2.16 * 1000000)

な気がします。


つーか、なんで1000000を掛けた値を送るような仕様なんだろ。。。。。