zoukankan      html  css  js  c++  java
  • iOS开发日记5-推送(信鸽推送)

    今天博主有一个集成信鸽推送的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步.

    推送分为用户推送,本地推送,远程推送和地理位置推送,其中最常用的就是远程推送,远程推送可以直接编写代码实现功能,也可以使用第三方的SDK,常用的第三方SDK有信鸽推送,极光推送和个推.今天和大家分享一下集成信鸽推送的过程.

    1.下载腾讯信鸽SDK

    它下面有两个版本:基础版和Pro版

    下载地址:http://xg.qq.com/xg/ctr_index/download

    注:信鸽ProiOS SDK是信鸽iOSSDK的加强版,整合了数据分析能力,没有数据分析需求使用基础版即可,博主使用的就是基础版

    2.创建应用,申请appID

    3.进行应用配置(点击“应用配置”)

    4.验证开发证书和生产证书

    配置iOS证书的具体流程请参考:http://developer.xg.qq.com/index.php/IOS_证书设置指南

    注:开发证书和生产证书均为pem类型的文件,证书密码为生成pem类型文件过程中所设置的密码 

    5.点击“测试设备”,增加测试设备,以便后期开发中进行测试调试

    其中设备Token的获取方式:在获取deviceToken的方法中,注册设备,打印Token 

    6.添加以下引用库

    CFNetwork.framework

    SystemConfiguration.framework

    CoreTelephony.framework

    Security.framework

    libz.dylib

    libsqlite.dylib

    libXG-SDK.a

     7.具体代码可以直接复制信鸽推送的官方demo,注释相当详细.

    这里重点和大家分享一下处理推送回调的问题:

    ①.当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions这个参数获取到。

    ②.当程序处于前台工作时,这时候若收到消息推送,会调用- (void)application:(UIApplication *)application

    didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

    ③.当程序处于后台运行时,这时候若收到消息推送,如果点击消息或者点击消息图标时,也会调用- (void)application:(UIApplication*)application

    didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

    ④.当程序处于后台运行时,这时候若收到消息推送,如果点击桌面应用图标,则不会调用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以无法获取消息

    第一种情况:

    if (launchOptions) {

    NSDictionary* pushNotificationKey = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

            if (pushNotificationKey) {

                //这里定义自己的处理方式

            }

    }

    第二、三种情况:

    if (application.applicationState == UIApplicationStateActive) {

    //第二种情况

            if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

                [WLHelper showAlert:@"推送消息" msg:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]];

            }

    } else {

    //第三种情况

    //这里定义自己的处理方式

    }

    第四种情况:目前还没想好,望各位看官集思广益,不胜感激

    http://blog.csdn.net/apple_app/article/details/39228221?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

    http://www.tuicool.com/articles/qqm6rq?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

  • 相关阅读:
    java 数据结构容器之HashSet
    java LinkedList模拟堆栈
    Java实现windows7标准型计算器
    Java迭代器注意事项
    (动态规划求解)聪明的kk
    三张图讲清楚Java中的方法的参数传递机制
    Java对象在内存中的表示
    两张内存变化图揭秘二维数组的初始化
    四张內存变化图揭秘引用类型数组的初始化
    三张內存变化图揭秘基本类型数组的初始化
  • 原文地址:https://www.cnblogs.com/Twisted-Fate/p/4742567.html
Copyright © 2011-2022 走看看