iOS远程推送之友盟Push

  入职后的一个任务,就是做远程推送,听老大说用的是友盟Push.所以就看了一下友盟push,具体的集成以及证书的生成请参照这里。具体的就不再多说了,主要是自己重新封装了一下UMessage,具体的内容如下:

//
//  ZGUmessagePush.h
//  NotePad
//
//  Created by zhanggui on 15/10/19.
//  Copyright © 2015年 xiaoguizi. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
#import "UMessage.h"

typedef void(^ResponsData)(id responseObject,NSError *error);
@interface ZGUmessagePush : NSObject

@property (nonatomic,strong)NSDictionary *receiveDic;

+ (instancetype)shared;
/**
 *添加友盟推送
 */
+ (void) startAddUmessageWithOptions:(NSDictionary *)launchOptions;
/**
 *注册设备
 */
+ (void)registerDeviceWithToken:(NSData *)data;

/**
 *接收信息
 */
+(void)didReceiveRemoteNotification:(NSDictionary *)receiveInfoMation;

/**
 *关闭接收消息的通知
 */
+ (void)closeUmessageNotification;
/**
 *使用友盟提供的默认提示显示
 */
+ (void)setCustomShow:(BOOL)isShow;
/**
 *自定义处理显示消息,receiveDic是推送过来的内容
 *  @param  receiveDic  指代推送过来的信息
 */
+(void)handleReceiveData:(NSDictionary *)receiveDic;
/**
 *是否允许SDK自动清空角标(默认为开启)
 *  @param  boo yes清空,no不自动清空
 */
+ (void)setApplicationBadegeClear:(BOOL)boo;
/**
 *设置是否允许SDK当应用在前台运行时收到Push时弹出Alert框(默认开启)
 *  @param  boo yes为允许前台运行时弹出alert,no为不允许
 */
+ (void)setShowAutoAlert:(BOOL)boo;
/**
 *设置地理位置信息
 *  @param  location:地理信息
 */
+ (void)setLocation:(CLLocation *)location;
/**
 *添加标签
 *  @param  tagArray    标签数组,用于盛放要添加的标签
 */
+ (void)addTags:(NSArray *)tagArray;
/** 绑定一个别名至设备(含账户,和平台类型)
 @warning 添加Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
 @param alias 账户,例如email
 @param type 平台类型,参见UMessage文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
 @param data 反馈数据,error为获取失败时的信息,responseObject为成功返回的数据
 */
+ (void)addAlias:(NSString *)alias type:(NSString *)type response:(ResponsData)data;
/** 删除一个设备的别名绑定
 @warning 删除Alias的先决条件是已经成功获取到device_token,否则失败(kUMessageErrorDependsErr)
 @param alias 账户,例如email
 @param type 平台类型,参见本文件头部的`kUMessageAliasType...`,例如:kUMessageAliasTypeSina
 @param response block返回数据,error为获取失败时的信息,responseObject为成功返回的数据
 */
+ (void)deleteAlias:(NSString *)alias type:(NSString *)type response:(ResponsData)data;
@end

  以上是.h文件。

//
//  ZGUmessagePush.m
//  NotePad
//
//  Created by zhanggui on 15/10/19.
//  Copyright © 2015年 xiaoguizi. All rights reserved.
//

#import "ZGUmessagePush.h"

#import <UIKit/UIKit.h>
#import "LoginViewController.h"
#import "LeftTableViewController.h"

#define _IPHONE80_ 80000
#define APPKEY @"5620da47e0f55a062b003b57"

#define UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

@implementation ZGUmessagePush

+(instancetype)shared {
    static ZGUmessagePush *sharedPush = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedPush = [[ZGUmessagePush alloc] init];
    });

    return sharedPush;
}
+ (void)startAddUmessageWithOptions:(NSDictionary *)launchOptions {
    [UMessage startWithAppkey:APPKEY launchOptions:launchOptions];
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
    if(UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
    {
        //register remoteNotification types (iOS 8.0及其以上版本)
        UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
        action1.identifier = @"action1_identifier";
        [email protected]"Accept";
        action1.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序

        UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  //第二按钮
        action2.identifier = @"action2_identifier";
        [email protected]"Reject";
        action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序,在后台处理
        action2.authenticationRequired = YES;//需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
        action2.destructive = YES;

        UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
        categorys.identifier = @"category1";//这组动作的唯一标示
        [categorys setActions:@[action1,action2] forContext:(UIUserNotificationActionContextDefault)];

        UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert
                                                                                     categories:[NSSet setWithObject:categorys]];
        [UMessage registerRemoteNotificationAndUserNotificationSettings:userSettings];

    } else{
        //register remoteNotification types (iOS 8.0以下)
        [UMessage registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge
         |UIRemoteNotificationTypeSound
         |UIRemoteNotificationTypeAlert];
    }
#else

    //register remoteNotification types (iOS 8.0以下)
    [UMessage registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge
     |UIRemoteNotificationTypeSound
     |UIRemoteNotificationTypeAlert];

#endif

#if  DEBUG
    [UMessage setLogEnabled:YES];
#endif
    [UMessage setLogEnabled:NO];
}
+ (void)didReceiveRemoteNotification:(NSDictionary *)receiveInfoMation {
    [UMessage didReceiveRemoteNotification:receiveInfoMation];
}
+ (void)registerDeviceWithToken:(NSData *)data {
    NSString *deveiceToken = [NSString stringWithFormat:@"%@",data];
    deveiceToken = [deveiceToken stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"deveice-token:%@",deveiceToken);
    [UMessage registerDeviceToken:data];
}
+ (void)closeUmessageNotification {
    [UMessage unregisterForRemoteNotifications];
}
+ (void)setCustomShow:(BOOL)isShow {
    [UMessage setAutoAlert:isShow];
}

//返回的推送信息:aps和d,p是UMessage带过来的,gender是自己添加的
//{
//    aps =     {
//        alert = "\U8868\U793a\U5185\U5bb9\U90a3\U4e2a";
//        badge = 1;
//        sound = default;
//    };
//    d = us88294144523914949311;
//    gender = girl;
//    p = 0;
//}
+ (void)handleReceiveData:(NSDictionary *)receiveDic {
    [UMessage setAutoAlert:NO];  //不自动弹出UMessage默认的提示框

    if ([UIApplication sharedApplication].applicationIconBadgeNumber!=0) {
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];  //设置徽章显示为0,即不显示
    }
    //不在前台才去处理
    if ([UIApplication sharedApplication].applicationState!=UIApplicationStateActive) {
        NSLog(@"UMessage:开始处理程序逻辑处理");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"标题" message:[receiveDic objectForKey:@"name"] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];
        [alert show];
    }else {
        NSLog(@"UMessage:程序正在前台运行,默认不做任何处理");
    }
}
+ (void)addTags:(NSArray *)tagArray {
    if ([tagArray isKindOfClass:[NSArray class]]) {
        if ([tagArray count]==0) {
            NSLog(@"没有添加任何tag");
            return;
        }else {
            [UMessage addTag:tagArray response:^(id responseObject, NSInteger remain, NSError *error) {
                if (error) {
                    NSLog(@"添加tag失败");
                }
            }];

        }
    }

}
+ (void)addAlias:(NSString *)alias type:(NSString *)type response :(ResponsData)data {
    [UMessage addAlias:alias type:type response:data];
}
+ (void)deleteAlias:(NSString *)alias type:(NSString *)type response:(ResponsData)data {
    [UMessage removeAlias:alias type:type response:data];
}
+ (void)setApplicationBadegeClear:(BOOL)boo {
    [UMessage setBadgeClear:boo];
}
+ (void)setShowAutoAlert:(BOOL)boo {
    [UMessage setAutoAlert:boo];
}
+ (void)setLocation:(CLLocation *)location {
    [UMessage setLocation:location];
}
@end

注意事项:

  1、如果是开发环境的话,需要添加deviceToken到友盟推送后台。

  2、根据传过来的字段进行不同页面之间的跳转都是在handleReceiveData:这个方法中进行操作的。

附:

类下载地址:http://pan.baidu.com/s/1o6kZbrc

时间: 2024-10-25 17:34:29

iOS远程推送之友盟Push的相关文章

iOS 远程推送 根据后台推送内容的不同跳转指定页面

转发自:http://www.jianshu.com/p/4531bd6e3a01 iOS 远程推送,根据后台推送内容的不同, 跳转指定页面 我目前的需求是总体分为两类: 1:私信.关注.点赞一类,只需跳转到对应的tabbar 中的某一项 2:每日精品文章项目推送,分两个子类 (1)如果当前已经打开 文章项目页面,则直接刷新,不推出新页面 (2)如果当前未打开此页面,则push出新的文章项目页面 iOS 推送情况分为 应用未启动的 情况: 打开应用 ,推送信息 会通过 - (BOOL)appli

IOS远程推送

一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称apns)推送到设备的程序上. 推送的新消息可能是一条信息.一项即将到期的日程或是一份远程服务器上的新数据.在系统上展现的时候,可以显示警告信息或

iOS远程推送原理及实现过程

推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题.那么首先让我们准备一些做推送需要的东西.我们需要一个付费的苹果开发者账号(免费的不可以做远程推送),有了开发者账号,我们可以去苹果开发者网站,配置自己所需要的推送的相关证书.然后下载证书,供我们后面使用,详细的证书配置过程,我们下面再说. 首先我们要说说iOS推送通知的基本原理: 苹果的推送服务通知是由自己专门的推送服务器AP

iOS消息推送证书生成以及Push消息(转)

iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone应用程序的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器. 上图可以分为三个阶段: 第一阶段:应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone. 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按

iOS 远程推送的实现

iOS的推送可以用下图简单的概括: 这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了.上图可以分为三步: 第一步:AVOS Cloud推送服务程序把要发送的消息.目的设备的唯一标识打包,发给APNs. 第二步:APNs在自身的已注册Push服务的应用列表中,查找有相应标识的设备,并把消息发送到设备. 第三步:iOS系统把发来的消息传递给相应的应用程

iOS 远程推送的详细配置

首先,来说一下苹果的推送机制.顾名思义,推送,是指服务器向客户端发送消息,那么在iOS中,应用是被后台挂起的,并不能一直连接网络,那么服务器怎么才能把消息发送到客户端呢?这就用到推送,苹果的推送机制,是只能由APNS发送推送通知,所以你自己的后台服务器想给客户端推送通知,得把要推送的内容发送给APNS. 说到这里,如果还不了解苹果的推送机制,可以自行查看资料.总之整体的流程就是:APP启动的时候,获取本设备的device_token,然后把这个device_token告诉你自己的服务器,服务器拿

iOS远程推送,从机制到实现,尽量详细

本人第一次写博客,写的不好的地方大家请见谅. 本文主要参考了http://blog.csdn.net/showhilllee/article/details/8631734,感谢showhilllee详细的讲解.因为在做的过程中有些自己的理解和变化,所以自己再写一遍关于推送的详细博客. 本文分为四部分介绍: 一.解释APNS远程推送 二.配置推送的证书 三.导出自己服务器可用的证书 四.代码实现设备注册推送.获取推送消息 好了,现在开始正式讲解推送. 一.首先上一个老图,苹果很早就给大家的,推送

iOS 远程推送通知 详解

1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com/developing/story/programming-apple-push-notification-services 3:书籍参考:iPhone 开发秘籍 第16章 推送通知. 好了,进入正文: 首先是申请证书的网址 https://developer.apple.com/ios/manag

IOS远程推送证书的制作步骤

今天还在看环信的使用方法,在环信的官网上发现了这组制作远程推送证书的一组图片,正好之前本人没有写过关于远程证书的笔记,这里要写一篇博文,整理一下远程推送证书的制作流程,尽管如此,本篇博文依然是作者原创,方便自己学习.参考使用.(声明本文的图片全部来自网络,是为了节省时间) (1)打开开发者中心,并登陆自己的开发者账号(或者公司的开发者账号) (2)从Member Center进入Certificates, Identifiers & Profiles (3)选择要制作的证书为推送证书 对于开发环