Cordova(PhoneGap) + Google Analytics

注意点

Cordova (PhoneGap)も Google Analytics も Admobも仕様変わりまくりで、ドキュメントがぐちゃぐちゃで、エラー出まくりでヒドイ状況。
現状、ググっても古い情報ばかりで、まともな情報でてこない。

2013年以降のドキュメントのみググって、(PhoneGap 1.x系とか)は見ないようにした方がいいと思う。

PhoneGap: cordova-2.6.0 を利用しています。

現在、他の広告をお試し中。(nend)

cordova-plugman をインストールする

プラグインをインストールする用のソフトウェアらしい。
注意: pluginstall なるものはもう存在しない模様。

apache/cordova-plugman · GitHub
https://github.com/apache/cordova-plugman

# npm install -g plugman

使い方

plugman --install --platform <ios|android|blackberry10|wp7|wp8> --project <directory> --plugin <name|url|path> [--plugins_dir <directory>] [--www <directory>] [--variable <name>=<value> [--variable <name>=<value> ...]]

GAPlugin のインストール

phonegap-build/GAPlugin · GitHub
https://github.com/phonegap-build/GAPlugin

上記から、git clone か zipダウンロードする

% plugman --install --platform ios --project [プロジェクトディレクトリ] --plugin /Users/ユーザ名/phonegap/GAPlugin-master

エラー

/usr/local/lib/node_modules/plugman/src/util/plugins.js:28
    tmp_dir = path.join(os.tmpdir(), 'plugman-tmp');

node のUPDATE

# npm update -g

v0.8.19 までしかアップデートできない?

node@0.0.0: To update or install node, go to http://nodejs.org/

公式サイトに行けと‥、公式からダウンロードしてnode.jsをインストール
v0.10.7 になっているのでok。

再度実行で以下のようなのが出て、インストール終了。

com.adobe.plugins.GAPlugin installed.

javascript での組み込み

以下、公式ドキュメントのてきとー訳。

このプラグインは、window.plugins.gaPlugin を作る。
onDeviceReadyの後に, ローカルの var を作り、 plugin を始めるべし、以下のように。
var gaPlugin;

function onDeviceReady() { gaPlugin = window.plugins.gaPlugin; gaPlugin.init(successHandler, errorHandler, "UA-12345678-1", 10); }


これで動く…はず?
コンパイルに失敗しているので、続く…

コンパイルエラー

以下のようなのが出たら

Warning: no rule to process file '$(PROJECT_DIR)/hoge'  /com.adobe.plugins.GAPlugin/libGoogleAnalytics.a' of type archive.ar for architecture 

Build Phases の Compile Sources から libGoogleAnalytics.a を Copy Bundle Sources に移動させると良い(らしい)

参考URL
dhilipsiva: Xcode: warning: no rule to process file '$(PROJECT_DIR)/path/to/file' of type for architecture
http://dhilipsiva.blogspot.jp/2012/10/xcode-warning-no-rule-to-process-file.html

Google Analytics SDK コンパイル時にエラーの件

以下のようなエラーが出る。

Undefined symbols for architecture i386:
  "_NSInMemoryStoreType", referenced from:
      anon in libGoogleAnalytics.a(GAIDataStore.o)
  "_NSSQLiteErrorDomain", referenced from:
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      anon in libGoogleAnalytics.a(GAIDataStore.o)
      ...
  "_NSSQLiteStoreType", referenced from:
      anon in libGoogleAnalytics.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSAttributeDescription", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAICoreDataUtil.o)
  "_OBJC_CLASS_$_NSEntityDescription", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAIHit.o)
      objc-class-ref in libGoogleAnalytics.a(GAIProperty.o)
  "_OBJC_CLASS_$_NSFetchRequest", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSManagedObject", referenced from:
      _OBJC_CLASS_$_GAIHit in libGoogleAnalytics.a(GAIHit.o)
      _OBJC_CLASS_$_GAIProperty in libGoogleAnalytics.a(GAIProperty.o)
  "_OBJC_CLASS_$_NSManagedObjectContext", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSManagedObjectModel", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAIDataStore.o)
  "_OBJC_CLASS_$_NSPersistentStoreCoordinator", referenced from:
      objc-class-ref in libGoogleAnalytics.a(GAIDataStore.o)
  "_OBJC_METACLASS_$_NSManagedObject", referenced from:
      _OBJC_METACLASS_$_GAIHit in libGoogleAnalytics.a(GAIHit.o)
      _OBJC_METACLASS_$_GAIProperty in libGoogleAnalytics.a(GAIProperty.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

以下で解決した。

沢山の対処方法があるが、僕は (Google Analytics SDK 2.0 beta 4) を使っているので、

  • CoreData.framework を追加

で解決

  • libGoogleAnalytics.a が Link Binary With Libraries で赤くなっていたので、 + をクリックした後、 Other Add みたいので、追加したのも必要かも。

Google Analytics Library IOS - Stack Overflow
http://stackoverflow.com/questions/13119578/google-analytics-library-ios

GAPlugin.js が読み込まれない件

以下の行が全く読み込まれないので、なんでかなと思っていたら…

        gaPlugin = window.plugins.gaPlugin;

以下のページに答えが。

javascript - alternative to cordova.addConstructor? - Stack Overflow
http://stackoverflow.com/questions/16082637/alternative-to-cordova-addconstructor

cordova.addConstructor(function () {

って書式はなくなって、以下の形でOKらしい。

       if (!window.plugins) {
            window.plugins = {};
        }
        window.plugins.pushNotification = new PushNotification();

本来なら、以下の形でプラグインをラップした方がいいとも言っている。

Defining Your Cordova Plugin As A Cordova Module · phonegap/phonegap-plugins Wiki · GitHub
https://github.com/phonegap/phonegap-plugins/wiki/Defining-Your-Cordova-Plugin-As-A-Cordova-Module

現状

  • 動いてない
  • javascript は、マニュアル通りに設定しているが、動いていない様子

navigator.notification.confirm で confirm メソッドがないとか。 deviceReadyの後にやれとかググると書いてあるが、やっても動かず…

  • 時間の無駄過ぎるので、現状放置。

アンインストール方法

GAPlugin がまともに動ごく気がしないので、アンインストール。

# plugman --uninstall --platform ios --project ./[アプリ名] --plugin com.adobe.plugins.GAPlugin --plugin_dir /Users/[ユーザ名]/phonegap/[アプリ名]/cordova/plugins/

com.adobe.plugins.GAPlugin uninstalled.

現状の結論

  • 時間が無駄にかかる
  • ドキュメント正しくない
  • 検索しても古い情報か、間違っている情報が多く、問題を解決するための情報なし

現在、以下をお試し中。

jelled/google-analytics-cordova-ios · GitHub
https://github.com/jelled/google-analytics-cordova-ios