首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用程序处于后台并且设备被锁定时,处理推送通知

当应用程序处于后台并且设备被锁定时,处理推送通知
EN

Stack Overflow用户
提问于 2014-09-16 12:23:00
回答 1查看 1.4K关注 0票数 2

我正在开发一个企业级应用程序,其中维护与设备会话同步的用户会话是一个关键且必需的特性。

基本要求是在用户杀死应用程序后立即从服务器结束用户会话,但是由于我们知道如何在代码中获得应用程序终止事件(除了启动一个后台任务,它最多可以运行10分钟),服务器仍然不知道app杀死。

我做了一些解决这个问题的办法。

首先,我使用了背景模式-

a)应用程序从网络下载内容。( b)应用程序根据推送通知下载内容。

这个想法是当用户通过切换到另一个应用程序或通过家庭按钮或锁定设备在后台发送应用程序时,应用程序向服务器发送应用程序在后台运行的请求,而服务器则知道该应用程序处于后台。

代码语言:javascript
复制
 -(void)applicationWillResignActive:(UIApplication *)application
 {
    // notify server that app is in background
 }

一旦服务器收到请求,它就会启动这个特定设备的计时器,该定时器会继续计算应用程序在后台的时间。服务器每5分钟向处于后台的设备发送请求以获取其状态。

代码语言:javascript
复制
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    NSDictionary *aps = [userInfo objectForKey:@"aps"];
    NSLog(@"NOTIFICATION IN BG %@",[aps objectForKey:@"message"]);

    NSString *message = [aps objectForKey:@"message"];

    if([message isEqualToString:@"Please update your status"]){
        // NOTIFY SERVER THAT APP IS IN BACKGROUND
    }

    if(application.applicationState != UIApplicationStateBackground){
        [self application:application didReceiveRemoteNotification:userInfo];
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

一旦应用程序再次出现在前台或成为活动应用程序通知服务器,它已成为活跃。

代码语言:javascript
复制
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // notify server that app is in Foreground // server resets the background timer to 0 for corresponding device
}

这种方法有助于跟踪应用程序是否终止,如果服务器没有从它发送的通知中得到任何响应,它将清除服务器上的用户会话。

现在,在第一种情况下,有两种情况--一种是完全按照预期工作的--第二种是它的工作方式。

案例1:BackGround中的App但设备没有锁定

  • App启动
  • 用户登录
  • App进入BG
  • 服务器已经收到通知,应用程序在BG中。
  • 服务器启动计时器。
  • 此设备服务器上的运行时间超过5分钟(应用程序仍在BG中)。
  • 服务器发送通知。
  • App在BG中接收远程推送通知。
  • 应用程序将其状态通知到BG中的服务器(因此服务器开始知道它没有被终止,用户会话不应该被清除)。

这个从BackGround设备向服务器发出远程通知和回复的循环一直持续到要么应用程序再次激活,要么被终止。

像预期的那样工作很好。

案例2:BackGround中的App和设备锁定

  • App启动
    • 用户登录
    • App进入BG
    • 服务器已经收到通知,应用程序在BG中。
    • 服务器启动计时器。
    • 设备是lOCKED
    • 此设备服务器上的运行时间超过5分钟(应用程序仍在BG中)。
    • 服务器发送通知。
    • 设备收到通知,设备显示通知横幅。
    • ,但非活动模式的App在BG.中不接收远程推送通知。
    • 因此,应用程序无法回复服务器

整个周期都会被抛出。

最终的问题是,当设备被锁定时,如何使它工作。

EN

回答 1

Stack Overflow用户

发布于 2014-09-16 13:04:54

-(UIApplication*)应用程序didReceiveRemoteNotification:(NSDictionary *)userInfo {

NSLog(@“用户信息%@",userInfo );}

通过此委托方法,您可以从server.And接收字典,完成您的工作,在单击通知栏中的通知后,accordingly.This方法将在您的应用程序中调用。

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

https://stackoverflow.com/questions/25868652

复制
相关文章

相似问题

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