こんにちは、私はこのAndroid 用 GCM 通知プラグインを使用しており、ほぼ完璧に動作します。唯一の問題は、ユーザーがアプリを強制終了したとき、またはデバイスがシャットダウンされたときに通知サービスが機能しなくなることです。
プラグイン コードの問題を調べたところ、次の関数が問題の原因であることがわかりました。
public static void sendJavascript( JSONObject _json )
{
String _d = "javascript:"+gECB+"(" + _json.toString() + ")";
Log.v(ME + ":sendJavascript", _d);
if (gECB != null ) {
gwebView.sendJavascript( _d );
}
}
デバイスをシャットダウンしてから電源を入れるか、アプリケーションを強制終了すると、gwebView の参照が失われます。メソッド gwebView.sendJavascript( _d ) を使用しようとすると、null ポインター例外が発生します。
プラグイン コードを確認すると、次のコードが示すように、デバイスの登録時に gwebView が参照されていることがわかりました。
public static Plugin gwebView;
private static String gECB;
private static String gSenderID;
@SuppressWarnings("deprecation")
@Override
public PluginResult execute(String action, JSONArray data, String callbackId)
{
PluginResult result = null;
Log.v(ME + ":execute", "action=" + action);
if (REGISTER.equals(action)) {
Log.v(ME + ":execute", "data=" + data.toString());
try {
JSONObject jo= new JSONObject(data.toString().substring(1, data.toString().length()-1));
gwebView = this;
..............................More code here......................
通知はバックグラウンドで受信されますが、gwebView は何も指していないため、JavaScript メソッドを呼び出すことができません。
私のアプローチは、gwebView に null ポインターがある場合は常にステータスバーに一般的な通知を表示することですが、この関数を使用するためにアプリケーションまたはコルドバのコンテキストを取得する方法がわかりません。
助けていただければ幸いです、ありがとう