###前提・実現したいこと
プッシュを受け取った際に、バックグラウンドでコールバックを呼び出すシステムを作成しようとしています。アプリ画面を立ち上げずにログを出すなどの処理をさせるコールバックですので、ユーザーにアプリが起動したように見えないようにしたいです。プッシュの受信にはFirebaseを使っています。
###発生している問題・エラーメッセージ
起動したアプリをアプリ履歴一覧から削除してしまうと、Service.onMessageReceived()でプッシュ通知を受け取るまではできるのですが、呼び出し先のインスタンスが保持されておらずコールバックを呼ぶことができません。
###該当のソースコード
Service
public class PushService extends FirebaseMessagingService() { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); Log.d("Test", "onMessageReceived called."); IMyInterface mif = ClassB.getMyInterface(); if (mif == null) { // ここでclassAがnullになる return; } mif.pushReceived(); } }
Interface
public interface IMyInterface { void pushReceived(); }
Static class
class MyClass { private static final MyClass instance = new MyClass(); private IMyInterface mif; public static init(IMyInterface mif) { instance.mif = mif; } public static IMyInterface getMyInterface() { return instance.mif; } }
Application
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // .... (略) Firebase token 登録処理など ... MyClass.init(new IMyInterface() { @Override public void pushReceived() { Log.d("Test", "pushReceived called."); } }); } }
###試したこと
Messenger, AIDL などでServiceから直接Applicationの起動をする方法などを調べたのですが良い方法が見つかっていない状態です。
###補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio 2.3
Java 8
target sdk version 25
min sdk version 14
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/29 11:55