タイトルの通り,TitaniumでAndroidのPush通知を実装しようとした際,結構詰まったので備忘録的に.
参考にした記事
Titanium の Android で GCM(Push通知) Google Play Service版
参考にさせていただきました.
他にもAndroidManifest.xmlについての記事を結構読んだ.
AndroidManifest.xmlを置いておくとうまく動かない
もう上の記事で実装までやってるし,正直そこまで詰まらないだろうなと思ってた.
詰まった原因はproject/platform/android/AndroidManifest.xml
AndroidManifest.xmlを置いてると上の記事の流れに沿ってやっていくだけじゃうまくいかなかった.
流れに沿ってやっただけだとdeviceTokenも取れなかった.
ただ,deviceTokenを取得するところまではさほど難しくなかった.
通知を受け取る部分がうまくいかず結構詰まってた.
ちなみにregistration IDを取得するためには,AndroidManifest.xmlに<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
を追加すれば取得できる.(確か)
timodule.xmlの中身をAndroidManifest.xmlに書き写すことで通知を受け取れるようになった
下記のAndroidManifest.xmlはnet.iamyellow.gcmjsのtimodule.xmlから書き写した部分やら通知を受け取るための権限やらを抜粋したもの.
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.pushtest" android:versionCode="1" android:versionName="1.0">
<application ...>
.
.
.
<activity android:name="net.iamyellow.gcmjs.GcmjsActivity" android:noHistory="true" android:theme="@style/Theme.Titanium">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
.
.
.
<service android:name="net.iamyellow.gcmjs.GCMIntentService"/>
<service android:name="net.iamyellow.gcmjs.GcmjsService"/>
<receiver android:name="net.iamyellow.gcmjs.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="com.example.pushtest"/>
</intent-filter>
</receiver>
</application>
<permission android:name="com.example.pushtest.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="com.example.pushtest.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
.
.
.
</manifest>
今回,android:name="net.iamyellow.gcmjs.~"としなきゃいけないところをandroid:name="com.example.pushtest.~"としていたため,Unable to instantiate receiver com.example.pushtest.~
みたいなエラーをずっと吐かれて詰まってた.
重要なのは android:name="net.iamyellow.gcmjs.~" のように android:name の値を使いたいモジュールのID.モジュールで定義したクラス名
にするということ.
あとは通知を受信するために必要な権限などを追加すること.(permissionやらuses-permission)
AndroidManifest.xml置いておくと,timodule.xmlって読み込まれないっぽい...?
結構初歩的なところでつまずいてた気がする...(´・ω・`)