zoukankan      html  css  js  c++  java
  • iOS -- 处理推送消息

    简介

    很多应用都会实现推送功能,我们可以集成第三方框架实现推送功能,比如:

    JPush推送:https://www.jpush.cn

    个推:http://www.getui.com

    下面来说说收到推送消息的逻辑处理

    收到推送消息有三种情况:

    1、应用未启动(默认显示在通知栏,或者锁屏时显示在锁屏页面)

    2、应用在后台挂起(默认显示在通知栏,或者锁屏时显示在锁屏页面)

    3、应用在前台(默认不显示)

    点击推送消息有两种情况:

    1、应用未启动 -> 启动

    这个时候如论是点击推送消息打开应用还是点击icon打开应用都会调用以下方法:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
    }

    通过launchOptions判断应用是点击推送消息打开应用还是点击icon打开应用,点击推送消息启动应用会把推送的消息userInfo通过launchOptions参数传递过来。

    推送是远程推送:

        if (launchOptions) {
            NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
            if (userInfo) {
                //接收到远程推送进行相应的逻辑处理          
            } 
        }

    推送是本地推送:

    if (launchOptions) {
            UILocalNotification *notifi = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
            if (notifi) {
                //处理本地推送消息
            }
        }

    2、应用在后台 -> 应用在前台

    应用在后台挂起时点击推送消息和应用在前台时收到推送消息,都会调用以下方法:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{
    
    }

    应用在后台挂起时默认是不调用该方法的,如果你需要接收到推送消息还没点击推送就调用该方法,可以让服务器发给APNS时在aps 字典中加入:

    aps = {
      content-available = 1;
    }

    应用有三种状态:未启动、后台挂起、前台;我们可以通过以下方法获取状态:
    NSInteger state = [UIApplication sharedApplication].applicationState;
        if (state == UIApplicationStateActive) {
            //应用在前台
        }
        else if(state == UIApplicationStateBackground){
            //应用在后台
        }
        else if(state == UIApplicationStateInactive){
            //应用从后台->前台
        }

    PS:

    最近负责公司项目的推送功能,要求根据推送消息中的“类型”参数判断具体跳转位置,项目中使用的是“个推”,下面来简单说说个推。

    个推中有个透传消息模版,只要应用在前台就会收到所有发过来的透传消息(不做任何显示,显示需要自己定义),即使关闭推送功能也会收到透传消息;接受到该消息会调用以下方法:

    - (void)GeTuiSdkDidReceivePayload:(NSString *)payloadId andTaskId:(NSString *)taskId andMessageId:(NSString *)aMsgId andOffLine:(BOOL)offLine fromApplication:(NSString *)appId {
        
        // [4]: 收到个推消息
        NSData *payload = [GeTuiSdk retrivePayloadById:payloadId];
    
        /**
         *汇报个推自定义事件
         *actionId:用户自定义的actionid,int类型,取值90001-90999。
         *taskId:下发任务的任务ID。
         *msgId: 下发任务的消息ID。
         *返回值:BOOL,YES表示该命令已经提交,NO表示该命令未提交成功。注:该结果不代表服务器收到该条命令
         **/
        [GeTuiSdk sendFeedbackMessage:90001 taskId:taskId msgId:aMsgId];
    }

     关于本地推送参考文档:

    http://blog.csdn.net/woaifen3344/article/details/44302635

  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/huahua0809/p/5288328.html
Copyright © 2011-2022 走看看