开发者社区> 我不是掌柜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

iOS远程推送之友盟Push

简介:
+关注继续查看

  更新记录:

    1、2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法。

------------------------------------------------------------------------------------------------------------------------------------------------------

  入职后的一个任务,就是做远程推送,听老大说用的是友盟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"

@interface ZGUmessagePush : NSObject

 

+ (instancetype)shared;

/**

 *设备注册友盟推送

 */

+ (void)registerUMessageWithOptions:(NSDictionary *)launchOptions;

/**

 *注册设备deviceToken

 */

+ (void)registerDeviceWithToken:(NSData *)data;

 

/**

 *程序未运行的时候,推送消息的处理

 *  @param  userInfo:推送过来的数据

 */

+ (void)handleNotRunAppRemoteUserInfo:(NSDictionary *)userInfo;

/**

 *程序运行的时候,推送消息的处理

 *@param    userInfo:推送过来的数据

 */

+ (void)handleRunAppRemoteUserInfo:(NSDictionary *)userInfo;

 

/**

 *默认的绑定用户账号

 */

+ (void)bandingDefaultCount;

/**

 *解绑用户账号

 */

+ (void)unBandingDefaultCount;

/**

 绑定账号

 @param account:要绑定的用户名

 */

+ (void)bandingTheCount:(NSString *)account;

/**

 *解绑用户账号

 */

+ (void)unBandingTheCount;

 

/**

 *添加标签

 */

+ (void)addTags:(NSArray *)tagArray;

@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 UFQUmessagePush *sharedPush = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        sharedPush = [[UFQUmessagePush alloc] init];

    });

    

    return sharedPush;

}

//#warning 需要修改为自己的APPKey

+ (void)registerUMessageWithOptions:(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";

        action1.title=@"Accept";

        action1.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序

        

        UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  //第二按钮

        action2.identifier = @"action2_identifier";

        action2.title=@"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

}

 

+ (void)registerDeviceWithToken:(NSData *)data {

    [UMessage registerDeviceToken:data];

#if DEBUG

    NSString *deveiceToken = [NSString stringWithFormat:@"%@",data];

    deveiceToken = [deveiceToken stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSLog(@"deveice-token:%@",deveiceToken);

#endif

}

 

+ (void)handleNotRunAppRemoteUserInfo:(NSDictionary *)userInfo {

    [UMessage setAutoAlert:NO];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"程序未运行的逻辑处理" message:[userInfo objectForKey:@"name"] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

    [alert show];

}

+ (void)handleRunAppRemoteUserInfo:(NSDictionary *)userInfo {

    [UMessage setAutoAlert:NO];

    if ([UIApplication sharedApplication].applicationState==UIApplicationStateActive) {  //程序在前台时逻辑处理

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"程序在前台的逻辑处理" message:[userInfo objectForKey:@"name"] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

        [alert show];

    }else {  //程序不在前台时的逻辑处理

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"程序不在前台的逻辑处理" message:[userInfo objectForKey:@"name"] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

        [alert show];

    }

}

+ (void)bandingDefaultCount {

    [UMessage addAlias:[[NSUserDefaults standardUserDefaults] objectForKey:@"username"] type:UFenQiType response:^(id responseObject, NSError *error) {

        if (error) {

            NSLog(@"Fail to banding...");

        }

    }];

}

+ (void)unBandingTheCount {

    [UMessage removeAlias:[[NSUserDefaults standardUserDefaults] objectForKey:@"username"] type:UFenQiType response:^(id responseObject, NSError *error) {

        if (error) {

            NSLog(@"Fail to banding...");

        }

    }];

}

+ (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(@"Add tag fail...");

                }

            }];

            

        }

    }

    

}

@end
复制代码

 

  

注意事项:

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

  2、程序通过推送开启的调用handleNotRunAppRemoteUserInfo:方法,程序本身已经开启,只是处于前台或者后台的的调用handleRunAppRemoteUserInfo:方法。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS 开发之全局特性设置
大家有没有发现???发现什么呢?What? 在平常用的App中,每一页的导航栏的颜色和字体都是一样的,有些是背景图片,有些是通过UIColor设置的颜色背景,本人在以前开发中,每次都在每个页面写一次导航栏的背景。
685 0
【iOS开发】分享一个被误认为是 bug 的东西
看着像bug的情况 正常情况 注意第一幅图,『收藏』Tab按钮和右上角的『垃圾桶』按钮,是灰色的(本应该是白色的)。 出现这种情况,没有任何代码的问题 (除非你故意把它设置成灰色)。
710 0
【iOS开发】全局设定 UINavigationBar 的 UI
App Screen Shot.png 如图,是个很简明的 UITabBarController 分出3个 UINavigationController,每个 UINavigationController 再跟一个 UITableViewController 的结构。
915 0
【Swift】SpriteKit开发iOS游戏——场景切换
前言 Swift是个很不错的语言,苹果官方提供的游戏开发框架也很不错。 作为一个游戏来讲,里面的场景Scene肯定不止一个,所以需要切换场景 代码 代码从创建的时候的demo开始,demo的创建路径是 开始我们会有一个场景文件GameScene 所以我们要创...
1196 0
分享 Ionic 开发 Hybrid App 中遇到的问题以及后期发布 iOS/Android 的方方面面
此篇文章主要整理了最近在使用 Ionic 开发 Hybrid App 过程中遇到的一些疑难点以及后期发布生成 iOS 和 Android 版本过程中的种种问题。 文章目录 Ionic 简介和项目需求介绍 View 缓存的处理 键盘的不同模式的支持 设备网络状况的检查 iOS 设备和 A...
1756 0
iOS开发中 常用枚举和常用的一些运算符(易错总结)
1、色值的随机值: #define kColorValue arc4random_uniform(256)/255.0 // arc4random_uniform(256)/255.
724 0
【iOS开发】强制修改 iOS 状态栏颜色
下面截图给出修改 iOS 状态栏颜色的 4 种方式 Target.png Info.plist.png Storyboard.png code.png 其中第四张图中的代码,直接写在你的任何一个 ViewController 的 class 里面就可以。
886 0
***iOS开发中@selector的理解与应用
@selector 是什么?   1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromString() 3可以理解为类似函数指针的东西--是能让Objective-C动态调用方法的玩意.
711 0
【iOS开发】从 UIWebView 到 WKWebView
引言 ①本文章适合有 UIWebView 基础的人看,如果实在没用过的话,至少你要知道 UIWebView 是个什么东西。 ② UIWebView 和 WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView 的1/3~1/4),没有缓存,更为细致地拆分了 UIWebViewDelegate 中的方法。
984 0
+关注
我不是掌柜
从小记性差,所以把东西都记下来。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
滴滴出行iOS端瘦身实践
立即下载
聚划算iOS平台动态化方案LuaView
立即下载