个推推送处理

首先,按照个推SDK集成指南配置好一个完整的工程。或者直接下载现有工程(需要修改bundle identifier、kGtAppId、kGtAppKey、kGtAppSecret)。
如有错误和待完善的地方,还请指正。

新建推送:

图2 注:Badge参数为icon的角标



本文将介绍对推送消息的两种处理方式。
在接收到推送消息时,分为3种情况,本文还将后两者细分为两种情况:

  1. APP处于前台
    1.1 APP接收到推送后推送后首先弹出一个Alert提示是否跳转页面
  2. APP处于后台
    2.1 点击通知栏使APP进入前台后,直接跳转页面
    2.2 点击icon图标使APP进入前台后,不作操作
  3. APP处于关闭状态
    3.1 点击通知栏启动APP,直接跳转页面
    3.2 点击icon图标启动APP,不作操作

方式一:

首先为AppDelegate添加一个属性,

// 用来判断是否是通过点击通知栏开启(唤醒)APP
@property (nonatomic) BOOL isLaunchedByNotification;

当通过点击通知栏来启动或唤醒APP时,会调用didReceiveRemoteNotification:方法,在该方法里将isLaunchedByNotification的值置为YES:

/** APP已经接收到“远程”通知(推送) - 透传推送消息  */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {

    // 当APP处于后台或者关闭状态,点击通知栏就会先走这个方法,再使得个推SDK收到透传消息回调
    // 处理APNs代码,通过userInfo可以取到推送的信息(包括内容,角标,自定义参数等)。如果需要弹窗等其他操作,则需要自行编码。
    NSLog(@"\n>>>APP已经接收到“远程”通知(推送)[Receive RemoteNotification - Background Fetch]:%@\n\n",userInfo);
    completionHandler(UIBackgroundFetchResultNewData);

    self.isLaunchedByNotification = YES;
}

然后会调用以下方法(当APP处于前台时会直接调用此方法),其中payloadData的值转为NSString对象即为图2中的消息内容里的JSON数据:

/** SDK收到透传消息回调 */
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

    // 收到个推消息
    NSString *payloadMsg = nil;
    if (payloadData) {

        payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes
                                              length:payloadData.length
                                            encoding:NSUTF8StringEncoding];
    }

    // 当app不在前台时,接收到的推送消息offLine值均为YES
    // 判断app是否是点击通知栏消息进行唤醒或开启
    // 如果是点击icon图标使得app进入前台,则不做操作,并且同一条推送通知,此方法只执行一次
    if (offLine) {

        // 离线消息,说明app接收推送时不在前台
        if (self.isLaunchedByNotification) {

            // app是通过点击通知栏进入前台
            [[NSNotificationCenter defaultCenter] postNotificationName:kNOTIFICATION_PUSH object:nil userInfo:@{kNOTIFICATION_PUSH : payloadMsg}];
            self.isLaunchedByNotification = NO;
        } else {

            // app是通过点击icon进入前台,在这里不做操作

        }
    } else if(!self.isLaunchedByNotification) {

        // app已经处于前台,提示框提示
        [[NSNotificationCenter defaultCenter] postNotificationName:kNOTIFICATION_ALERT object:nil userInfo:@{kNOTIFICATION_ALERT : payloadMsg}];
    }elf.isLaunchedByNotification = NO;
    }
}

2.2和3.2情况下的问题

这两种情况下,如果用户不点击通知栏而是点击桌面icon图标启动或唤起APP,会直接调用GeTuiSdkDidReceivePayloadData:方法,根据本文的方式处理的话确实不会有任何操作,但是通知栏的消息仍然存在,如果再次点击通知栏消息,仍会调动didReceiveRemoteNotification:方法,但是不会再调用GeTuiSdkDidReceivePayloadData:方法,这样的话isLaunchedByNotification的值会被置为YES,而且无法再被置为NO。
解决办法:在app进入前台后通过将Badge角标置为0来移除通知栏信息,代码如下:

- (void)applicationDidBecomeActive:(UIApplication *)application {

    // 这里的写法是为了在app进入前台后,清除通知栏消息
    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badge = badge == 1 ? 2 : 1;
    // 这里经过两次赋值才可以移除通知栏消息
    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

//    // 下面这个方法只有Badge角标不为0时才执行,如果个推推送时Badge为0,那么不会走下面的方法
//    if (badge) {
//
//        badge = badge == 1 ? 2 : 1;
//        [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
//        [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
//    }
}

方式二:

这种方式默认在通过点击icon使app进入前台时不做操作。
当通过点击通知栏来启动或唤醒APP时,会调用didReceiveRemoteNotification:方法,接收到的推送内容包含在userInfo参数里,可以在此方法里对推送消息进行操作:

/** APP已经接收到“远程”通知(推送) - 透传推送消息  */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {

    // 当APP处于后台或者关闭状态,点击通知栏就会先走这个方法,再使得个推SDK收到透传消息回调
    // 处理APNs代码,通过userInfo可以取到推送的信息(包括内容,角标,自定义参数等)。如果需要弹窗等其他操作,则需要自行编码。
    NSLog(@"\n>>>APP已经接收到“远程”通知(推送)[Receive RemoteNotification - Background Fetch]:%@\n\n",userInfo);
    completionHandler(UIBackgroundFetchResultNewData);

    // app是通过点击通知栏进入前台
    [[NSNotificationCenter defaultCenter] postNotificationName:kNOTIFICATION_PUSH object:nil userInfo:@{kNOTIFICATION_PUSH : payloadMsg}];
}

同时,由于系统方法调用完成后,个推仍会调用一次GeTuiSdkDidReceivePayloadData:方法,需要在GeTuiSdkDidReceivePayloadData:方法里判断当前消息是否为offLine离线消息,如果是离线消息则不做任何处理:

/** SDK收到透传消息回调 */
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

    // 收到个推消息
    NSString *payloadMsg = nil;
    if (payloadData) {

        payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes
                                              length:payloadData.length
                                            encoding:NSUTF8StringEncoding];
    }

    // 当app在前台时,接收到的推送消息offLine值均为NO
    // 对于离线消息,这里不做操作
    if (!offLine) {

        // app已经处于前台,提示框提示
        [[NSNotificationCenter defaultCenter] postNotificationName:kNOTIFICATION_ALERT object:nil userInfo:@{kNOTIFICATION_ALERT : payloadMsg}];
    }
}

对于角标的处理可以参考方式一中的处理方法。

前言 在去年的苹果大会上,苹果带来的iOS 10 系统中将之前繁杂的推送通知统一成UserNotifications.framework 来集中管理和使用通知功能,还增加一些实用的功能——撤回单条通知、更新已展示通知、中途修改通知内容、在通知中显示多媒体资源、自定义UI等功能。

前言

在去年的苹果大会上,苹果带来的iOS 10 系统中将之前繁杂的推送通知统一成UserNotifications.framework 来集中管理和使用通知功能,还增加一些实用的功能——撤回单条通知、更新已展示通知、中途修改通知内容、在通知中显示多媒体资源、自定义UI等功能。
那么在ios10之前,ios的消息推送是怎么分类的呢?

ios 10之前

在ios之前,iOS推送分为Local Notifications(本地推送) 和 Remote Notifications(远程推送)。

本地推送

不需要服务器支持(无需联网)就能发出的推送通知,app本地创建通知,加入到系统的Schedule里,如果触发器条件达成时会推送相应的消息内容,如常见的定时任务闹钟等。

使用上也是非常简单。

/*
 @property(nonatomic,copy) NSDate *fireDate;
 @property(nonatomic,copy) NSTimeZone *timeZone; 时区

 @property(nonatomic) NSCalendarUnit repeatInterval; 重复间隔(枚举)
 @property(nonatomic,copy) NSCalendar *repeatCalendar; 重复日期(NSCalendar)

 @property(nonatomic,copy) CLRegion *region 设置区域(设置当进入某一个区域时,发出一个通知)

 @property(nonatomic,assign) BOOL regionTriggersOnce YES,只会在第一次进入某一个区域时发出通知.NO,每次进入该区域都会发通知

 @property(nonatomic,copy) NSString *alertBody;      

 @property(nonatomic) BOOL hasAction;                是否隐藏锁屏界面设置的alertAction
 @property(nonatomic,copy) NSString *alertAction;    设置锁屏界面一个文字

 @property(nonatomic,copy) NSString *alertLaunchImage;   启动图片
 @property(nonatomic,copy) NSString *alertTitle

 @property(nonatomic,copy) NSString *soundName;

 @property(nonatomic) NSInteger applicationIconBadgeNumber;

 @property(nonatomic,copy) NSDictionary *userInfo; // 设置通知的额外的数据
 */

- (IBAction)addLocalNote:(id)sender {
    // 创建一个本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];

    // 设置本地通知的一些属性(通知发出的时间/通知的内容)
    // 设置通知发出的时间
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
    //设置通知的内容
    localNote.alertBody = @"吃饭了吗?";
    //设置锁屏界面的文字
    localNote.alertAction = @"查看具体的消息";
    //设置锁屏界面alertAction是否有效
    localNote.hasAction = YES;
    //设置通过点击通知打开APP的时候的启动图片(无论字符串设置成什么内容,都是显示应用程序的启动图片)
    localNote.alertLaunchImage = @"111";
    //设置通知中心通知的标题
    localNote.alertTitle = @"222222222222";
    //设置音效
    localNote.soundName = @"buyao.wav";
    //设置应用程序图标右上角的数字
    localNote.applicationIconBadgeNumber = 1;
    //设置通知之后的属性
    localNote.userInfo = @{@"name" : @"张三", @"toName" : @"李四"};

    //调度通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}

当用户点击本地推送通知的时候,会自动打开app,这里有2种情况:app在后台运行,或者被系统进程杀死,对于这两种情况,我们怎么处理呢?

app后台运行


这时候我们只需要调用下AppDelegate方法即可。代码实现

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // 跳转逻辑
    if (application.applicationState == UIApplicationStateActive) return;

    if (application.applicationState == UIApplicationStateInactive) {
        // 当应用在后台收到本地通知时执行的跳转代码
        [self jumpToSession];
    }

    NSLog(@"local notifacation %@", notification);
}

- (void)jumpToSession
{
    UILabel *redView = [[UILabel alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(0, 100, 300, 400);
    redView.numberOfLines = 0;
    // redView.text = [NSString stringWithFormat:@"%@", launchOptions];
    [self.window.rootViewController.view addSubview:redView];
}

app被杀死


对于app被杀死的情况,要先启动app,启动完毕会调用AppDelegate方法。
需要特别注意的是:在iOS8.0以后本地通知有了一些变化,如果要使用本地通知,需要得到用户的许可。
部分代码实现:

#define IS_iOS8 ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0)

@interface AppDelegate ()

@end

@implementation AppDelegate

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

    /*
     UIUserNotificationTypeNone    = 0,      不发出通知
     UIUserNotificationTypeBadge   = 1 << 0, 改变应用程序图标右上角的数字
     UIUserNotificationTypeSound   = 1 << 1, 播放音效
     UIUserNotificationTypeAlert   = 1 << 2, 是否运行显示横幅
     */

    [application setApplicationIconBadgeNumber:0];

    if (IS_iOS8) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
    }

    // 如果是正常启动应用程序,那么launchOptions参数是null,其他方式需要对launchOptions设置
    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        // 当被杀死状态收到本地通知时执行的跳转代码
        // [self jumpToSession];
        UILabel *redView = [[UILabel alloc] init];
        redView.backgroundColor = [UIColor redColor];
        redView.frame = CGRectMake(0, 100, 300, 400);
        redView.numberOfLines = 0;
        redView.text = [NSString stringWithFormat:@"%@", launchOptions];
        [self.window.rootViewController.view addSubview:redView];
    }

    return YES;
}

远程推送

远程推送指从远程服务器推送给客户端的通知(需要联网),远程推送服务一般采用苹果的APNS (Apple Push Notification Service)。

要实现远程推送,一般会涉及到三个阶段:

  1. APNS Pusher应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
  2. APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
  3. iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

基本配置

条件:新建一个对应你bundle的push 证书,打开Push Notifications 开关(XCode7不打开也可以正常使用,XCode8以后必须打开)。

代码实现:
注册接受APNs通知。

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

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        // 1.注册UserNotification,以获取推送通知的权限
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
        [application registerUserNotificationSettings:settings];

        // 2.注册远程推送
        [application registerForRemoteNotifications];
    } else {
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    }
    return YES;
}

调用AppDelegate方法,获取到用户的deviceToken。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // <32e7cf5f 8af9a8d4 2a3aaa76 7f3e9f8e 1f7ea8ff 39f50a2a e383528d 7ee9a4ea>
    // <32e7cf5f 8af9a8d4 2a3aaa76 7f3e9f8e 1f7ea8ff 39f50a2a e383528d 7ee9a4ea>
    NSLog(@"%@", deviceToken.description);
}

推送通知,和本地通知一样有两种状况。

// 当接受到远程退职时会执行该方法(当进入前台或者应用程序在前台)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"%@", userInfo);

    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redView];
}

苹果建议使用方法

/*
 1.开启后台模式
 2.调用completionHandler,告诉系统你现在是否有新的数据更新
 3.userInfo添加一个字段:"content-available" : "1" : 只要添加了该字段,接受到通知都会在后台运行
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"%@", userInfo);
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redView];

    completionHandler(UIBackgroundFetchResultNewData);
}

UserNotitfication

iOS10 中统一了本地推送和远程推送的 API,在 UserNotifications.framework 来统一处理与推送相关任务,并增加了图片、音频、视频,自定义通知 UI 等新特性。

通知界面

多媒体

在此次版本中,iOS10 不仅新增消息的3dtouch等,还对图片、音频、视频等多媒体做了改进和优化。

类型 限制大小
图片  10M
音频  5M
视频  50M

多媒体推送代码:

if #available(iOS 10.0, *) {
      let content = UNMutableNotificationContent()
      content.title = "iOS10 推送测试"
      content.body = "附件"
      content.userInfo = ["icon":"1","mutable-content":1]
      content.categoryIdentifier = "InputSomething"

      let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)

      let requestIdentifier = "imageLocal"
      if let imageURL = Bundle.main.url(forResource: "[email protected]", withExtension: "png"), let attachment = try? UNNotificationAttachment(identifier: "imageAttachment", url: imageURL, options: nil) {

        content.attachments = [attachment]
      }

      let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger)

      UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in
        if (error != nil) {
          print("error: \(error.debugDescription)")
        }
      })
    }

通常在做多媒体自定义推送的时候,一般会用到UNNotificationServiceExtension应用扩展,通过在 payload 中增加 mutable-content 字段来触发扩展。

{
    "aps":{
        "alert":"IOS10 推送测试",
        "sound":"default",
        "badge":1,
        "mutable-content":1,
        "category":"InputSomething"
    },
    "image":"https://ws1.sinaimg.cn/mw690/934b5ef8gw1fapg2ssteej20oz0oz420.jpg"
}

当推送达到 app 时,会启动扩展并回调 didReceive 方法。在该方法里面可以对推送的 UNMutableNotificationContent 做出相应的修改。在 didReceive 回调方法中的 request 包含了推送的具体信息,可以通过其 userInfo 属性来解析出多媒体的 url。

let imageURL = Bundle.main.url(forResource: "lufei", withExtension: "jpg")

值得注意的是这里 Bundle 指的是扩展的沙盒,不是 app 的沙盒,所以资源的路径要正确。

而读取远程资源比读取本地资源一般要多一步保存操作。

private func downloadAndSave(url: URL, handler: @escaping (_ localURL: URL?) -> Void) {
    let task = URLSession.shared.dataTask(with: url, completionHandler: {
      data, res, error in

      var localURL: URL? = 下载完之后保存到本地并返回本地的 url

      handler(localURL)
    })

    task.resume()
  }

得到本地的 url 之后操作就一样了,都是通过 url 来生成一个 UNNotificationAttachment 对象。一切都操作完之后将这个 UNMutableNotificationContent 对象返还 contentHandler(bestAttemptContent)。

自定义界面

除了上述功能外,苹果还新增了自定义界面,这个绝对是大招。

其中上面的黄色区域可以理解成一个 ViewController 操作,下面绿色部分就是 Title 之类的显示内容。这部分是可以隐藏的。在扩展的目录下的 info.plist 编辑一些界面相关的东西。

说明:

  • UNNotificationExtensionCategory 触发 Extension 的 category 这里需要在注册才能有效的触发 字符串类型
  • UNNotificationExtensionInitialContentSizeRatio 上图黄色区域的长宽比,float 类型
  • UNNotificationExtensionDefaultContentHidden 默认内容是否隐藏,Bool 类型

原文地址:https://www.cnblogs.com/jx66/p/8394757.html

时间: 2024-08-30 00:20:59

个推推送处理的相关文章

APICloud携手个推推送发布 “Time to Market”战略

APICloud联合包括个推推送在内的专业B2D开发者服务商推出了"Time to Market"战略,同时发布了与此配套的APP生态产品:"模块Store",包括消息推送.支付.语音.地图等,旨在帮助APP创业公司和开发者能够在更短时间内开发并发布APP. 中国移动开发者市场出现了和欧美市场完全不同的B2D服务体系,通过APICloud与B2D合作伙伴的共同努力,实现了从APP开发.管理.测试甚至到APP加固的"1+1"模式服务(一站式+一键集

个推推送SDK集成过程及开发建议

服务简介 个推是由国内个信互动网络科技有限公司所推出的平台,帮助企业的应用通过低成本互联网通道进行消息推送,提供完善.高效.稳定的服务体系,解决了互联网云端到手机端的消息互通问题,依托于已有成熟的推送技术,建立更加稳定符合市场需求的标准化服务平台.下面介绍下个推SDK的特色功能简介. 功能特色 灵活高效的SDK SDK集成半天即可完成,使用推送管理后台,当天即可零开发群.发消息.同时服务API可以与已有业务紧密结合. 出乎意料的快速,瞬间送达 消息到达移动设.备延时小于0.2s.无论何时何地,有

哪里有苹果日历推推送设备购买

哪里有苹果日历推推送设备购买[电薇:13286x8841x09][Q群780516296]浙江反腐干部去世 病重时身挂胆道引流袋去巡视女篮主帅:战朝韩联队谈不上复仇 有争冠决心印度卢比兑美元跌破70.78关口 创历史新低施廷懋实现亚运三连冠 郭晶晶吴敏霞都不曾做到中纪委披露以权换股受贿:批扶持资金事后买原始股宅地使用权续期首提缴费 被指在老百姓承受范围内滴滴在上海顺风车业务此前未备案 涉嫌违法经营中国女排完胜印度小组头名出线 淘汰赛遇菲律宾男子闯飞机客舱"挽留"女性朋友 延误航班被拘媒

哪里有苹果日历推推送设备出售

哪里有苹果日历推推送设备出售[电薇:13286x8841x09][Q群780516296]男子闯急诊为狗看病被拒后大闹医院 警方:拘10日牛汇:金价结束六周连跌 现在是时候买进黄金了吗欧美市场形势堪忧 日本三大车企竞相在华扩大产能纽黑文赛萨巴伦卡横扫纳瓦罗 斩获职业生涯首冠中超-赵旭日世界波张鹭扑点 权健1-0恒丰终止不胜屡被"断交" 台当局承认已评估零"邦交国"可能德协会:投资非洲 我们应该把中国当榜样而非对手海关总署:对布基纳法索97%税目产品进口零关税山东潍坊

HBuilder开发的APP使用个推推送消息

1.APP端配置 a.允许使用第三方插件: 打开app的manifest.json文件,切换到可视化视图,允许使用第三方插件.    b.配置第三方插件(个推) 在APP的manifest.json文件中的permission节点下添加push节点: "Push": { "description": "管理推送消息插件" }, 如果已经存在的话不用修改. 在plus-->distribute-->plugins节点下添加push节点

个推推送iOS版 常见问题详解

原文:http://www.oschina.net/question/1782938_234760 1.提交了.p12文件后多久可以测试? 提交后10分钟左右才可以测试,并不是立即生效的. 2.应用在后台时接收不到消息,即APNS消息接收不到? 1.    先去查看CID和APPID绑定是否正确. 2.    根据CID去查devicetoken,确认CID和devicetoken绑定是否正确. 3.    查看证书是否上传错误 4.    服务端推送的,请检查离线时间是否设置. 3.devic

android 手把手教你10分钟快速接个推推送服务

在现在的一款app中,如果没有推送功能,就好像做项目中没用到listview,你出去面试都不好意思说自己是做android开发的, 但是推送自己写嘛,我可以说70~80%公司都是使用第三方的,因为这块不好做,对技术要求也高,所以学习,做起来花费时间也多,综合起来所以一般都用第三方的,目前市场上推送第三方有个推,激光,百度推送,腾讯的信鸽,友推,相比起来,目前我所知道的好多都是使用个推,而且目前公司项目也是使用个推,今天就接入了个推,所以写个博客,把自己遇到的问题记录下,也方便后人观看, 使用第三

Android实现推送方式解决方案

Android实现推送方式解决方案 本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识: 在移

android极光推送

版权声明:本文为博主原创文章,未经博主允许不得转载. Android开发记录18-集成推送服务的一点说明 关于推送服务,国内有很多选择,笔者也对它们进行了一个详细的对比,一般我们产品选择推送服务主要考量以下几个要素: 1.是否收费,如何收费? 2.推送内容是是什么(是否包含通知.消息.富媒体等等) 3.稳定性.及时性如何? 4.集成难度是否简单 5.支持平台有哪些(主流Android.IOS) 6.服务端支持语言(Java.C#.PHP.Python等) 下面笔者例举国内主要的一些推送服务: 来