iOS集成友盟推送

Posted 一切都是最好的安排

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS集成友盟推送相关的知识,希望对你有一定的参考价值。

之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务

 

在这之前我们需要做一些准备动作

#1. 注册一个App ID

#2. Enable Push NotificationSerivice, 并创建和下载开发/发布推送证书

#3. 安装推送证书, 然后把推送证书到处为p12文件

#4. 注意友盟账号

#5. 创建一个推送应用, 并上传推送证书的p12文件和填写密码

#6. 下载SDK, 添加到项目中

 

在AppDelegatez

#import "UMessage.h"

 

添加一个属性

@property (nonatomic, strong) NSDictionary *userInfo;

 

添加协议:

@interface AppDelegate ()<UNUserNotificationCenterDelegate>

 

设置友盟AppKey

static NSString *UMessageAppKey          = @"112345678901234523";

 

创建一个配置友盟推送的方法

- (void)configureUMessageWithLaunchOptions:(NSDictionary *)launchOptions {
    
    //设置AppKey & LaunchOptions
    [UMessage startWithAppkey:UMessageAppKey launchOptions:launchOptions];
    
    //初始化
    [UMessage registerForRemoteNotifications];
    
    //开启log
    [UMessage setLogEnabled:YES];
    
    //检查是否为ios 10以上版本
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 10.0) {
        
    } else {
        
        //如果是iOS 10以上版本则必须执行以下操作
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        
        center.delegate                = self;
        
        UNAuthorizationOptions types10 =         UNAuthorizationOptionBadge | UNAuthorizationOptionAlert |UNAuthorizationOptionSound;
        
        [center requestAuthorizationWithOptions:types10
                              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                  
                                  if (granted) {
                                      //点击允许
                                      //这里可以添加一些自己的逻辑
                                      
                                  } else {
                                      //点击不允许
                                      //这里可以添加一些自己的逻辑
                                      
                                  }
                                  
                              }];
    }
}

 

协议方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    //关闭友盟自带的弹出框
    [UMessage setAutoAlert:NO];
    
    [UMessage didReceiveRemoteNotification:userInfo];
    
    self.userInfo = userInfo;
    //定制自定的的弹出框
    if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示"
                                                            message:self.userInfo[@"aps"][@"alert"]
                                                           delegate:self
                                                  cancelButtonTitle:@"确定"
                                                  otherButtonTitles:nil];
        [alertView show];
        
    }
}

//iOS10新增:处理前台收到通知的代理方法
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    
    NSDictionary * userInfo = notification.request.content.userInfo;
    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        
        //应用处于前台时的远程推送接受
        //关闭友盟自带的弹出框
        [UMessage setAutoAlert:NO];
        //必须加这句代码
        [UMessage didReceiveRemoteNotification:userInfo];
        
    }else{
        
        //应用处于前台时的本地推送接受
    }
    
    //当应用处于前台时提示设置,需要哪个可以设置哪一个
    completionHandler(UNNotificationPresentationOptionSound |
                      UNNotificationPresentationOptionBadge |
                      UNNotificationPresentationOptionAlert);
}

//iOS10新增:处理后台点击通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
        withCompletionHandler:(void (^)())completionHandler{
    
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        
        //应用处于后台时的远程推送接受
        //必须加这句代码
        [UMessage didReceiveRemoteNotification:userInfo];
        
    }else{
        
        //应用处于后台时的本地推送接受
    }
}


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    [UMessage sendClickReportForRemoteNotification:self.userInfo];
}

 

最后是在ApplicationDidFinishLaunch中调用配置友盟推送的方法即可

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //配置友盟推送
    [self configureUMessageWithLaunchOptions:launchOptions];
    
    
    return YES;
}

 


以上是关于iOS集成友盟推送的主要内容,如果未能解决你的问题,请参考以下文章

友盟ios推送时怎么设置body参数

AppDelegate减负之常用三方封装 - 友盟推送篇

友盟-推送-Andorid-消息推送-打开通知消息进入特定Activity操作?

Android集成友盟推送功能

使用极光/友盟推送,APP进程杀死后为啥收不到推送

iOS开发——iOS10升级极光推送SDK友盟分享SDK