首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从最近列表中删除应用程序时未调用Android

从最近列表中删除应用程序时未调用Android
EN

Stack Overflow用户
提问于 2016-09-26 11:01:48
回答 1查看 3.2K关注 0票数 5

编辑2016年11月24日:我刚刚收到了Firebase支持的消息。他们认为这是华硕的问题。我使用的设备是华硕ZenFone 2激光器。以下是他们的回应:

这里的问题是,谷歌并不控制制造商如何定制他们版本的android。如果华硕遵循Android的指导原则,那么通知应该能正常工作(就像在其他设备上一样)。 我们发现的一件事是,一些手机将应用程序设置为有效的停止状态,从而阻止应用程序接收到通知。 从你的测试结果来看,情况似乎并非如此。但是,华硕还有许多其他方法可以阻止通知的工作,不幸的是,我们无法检查所有这些通知。 最好是你联系华硕的支持,并让我们知道,如果有任何消息。

对于我的客户来说,这是一个低优先级的问题,我现在不打算再继续下去了。不幸的是,我没有时间在其他设备上测试同样的问题。如果这种情况在将来发生变化,我会很高兴地更新这个问题。到现在为止,我会考虑这件事尚未解决。我很想知道其他品牌的手机是否存在同样的问题。

至于华硕用户,有一件事要考虑:有节电设置禁用通知。

编辑30/09/2016:关于这个问题,我已经联系过Firebase的。他们似乎同意亚瑟·汤普森的说法:

  • 停止的应用程序不应该接收消息。
  • 从最近的列表中删除一个应用程序,如果而不是停止应用程序。

有趣的是,我的应用程序似乎没有停止。运行adb shell dumpsys package | grep stopped时,包返回:

代码语言:javascript
运行
复制
User 0:  installed=true hidden=false stopped=false notLaunched=false enabled=0

这表明它没有停止并且仍然应该接收消息(根据非常有用的Firebase支持工程师)。然而,应用程序并没有接收到这些信息。

编辑,2016年9月27日:,我省略了有效载荷中的notification对象,并移动了该信息,而不是data对象。这不能解决问题。我想我对这个问题还不够清楚。问题是,当应用程序被杀死时(从最近的程序中删除),服务不再被呼叫或接收通知。

原始帖子

有类似的帖子,但没有一个解决这个问题或提出解决办法。

我正在实现FCM以获得通知。(我是FCM的新手。)消息有效负载是notificationdata的组合。当应用程序位于前台时,服务会触发onMessageReceived()。当应用程序在后台时(即,我按了home按钮),onMessageReceived()就不会像预期的那样启动,而只是显示一个通知。我仍然可以看到MyFirebaseMessagingService.onCreate()onDestroy()上的日志语句,这是很棒的。

现在,当我按下“最近的应用程序”按钮并将应用程序从列表中删除时,我将不再收到任何通知。onCreate()onDestroy()不再被称为。没有出现任何通知。我也希望在这个场景中出现一个通知。

有效载荷示例:

代码语言:javascript
运行
复制
{
    "to":"token",
    "priority":"high",
    "notification": {
        "body":"hello",
        "title":"Message from Mom",
        "click_action":"ACTIVITY_MAIN"
    },
    "data":{
        "open":"chat"
    }
}

FCM服务:

代码语言:javascript
运行
复制
public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onCreate() {
        super.onCreate();
        Log.v(DmcApplication.TAG, "Service Created");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.v(DmcApplication.TAG, "Service Destroyed...");
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.v(DmcApplication.TAG, "Message received!");
        EventBus.getDefault().post(new MessageEvent(remoteMessage.getNotification().getBody()));
    }

}

清单中的位(在相关情况下)

代码语言:javascript
运行
复制
<service
    android:name="com.example.package.myFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

日志:

代码语言:javascript
运行
复制
//Log when app is in foreground and message comes in:
V/coo: Service Created
V/coo: Message received!
V/coo: Service Destroyed...

//Log when app is in background and message comes in:
V/coo: Service Created
V/coo: Service Destroyed...

//Log when app is killed:
<silence...>

任何帮助都会非常感谢,因为我已经被困在这几天了。

EN

回答 1

Stack Overflow用户

发布于 2016-09-26 11:23:20

我遇到了同样的问题,看看你的“优先级:高”字符串,它看起来像是你要发送给安卓和iOS。最后,我去掉了消息的通知部分,只将所需的信息放入数据消息中。数据有效负载部分触发您的服务,即使它是背景或从最近的应用程序中删除。

在我的服务器上,我检查用户是否从iOS设备或Android设备注册了他们的令牌,并根据iOS设备的通知有效负载和安卓设备的数据有效负载发送相应的有效负载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39701107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档