iOS开发

iOS融云集成之推送设置

2017-08-17  本文已影响1561人  ProgrammerChan

在集成使用融云完成之后,最后一部分就是设置推送消息。设置推送总的来说分为4步。
1.创建证书(IOS Developer创建)
2.上传证书(上传到融云后台)
3.代码设置
4.测试

一:创建证书

1.打开Apple Developer,然后点击certificaties,identifiers....

91883A80-4B57-41D7-8A54-2B1D450CC4E7.png

2.点击左侧App IDs后,在点击右边加号创建



3.在打开的创建页面填写相关信息,App Services下面要勾选Push Notifications允许推送,勾选后点击register。就创建成功了。


18433048-DEB5-4EEF-9CEA-C7D08FDCCFE6.png
4.回到APP IDs界面,点击刚刚创建好的Identifier,你会发现push notifications上面都是黄色的configurable的状态,意思是还需要配置的意思。点击下方的edit进行证书的配置。
41B0A439-425C-43B1-838A-AA3EE80D2745.png
5.一个是开发的时候的证书,一个是生产时候的证书,其实就是测试和上线的区别。以创建development SSL Certificate为例,下面这个是一样的操作。
4D50ED34-2A54-4E05-9186-15C32BE26E9C.png

6.这些英文就是教你怎么创建证书的,直接点continue


C4B1B1A2-0111-4929-9578-0B0D6B4EC6D3.png
7.这时候会让你choose file,意思就是让你上传一个空的证书来上面生成。如果制作一个空的证书,如下。
<1>.打开mac的钥匙串访问
<2>.跟着图点一下
F2D96DB9-D9A6-4535-9DEA-F5871BF2C5D7.png
<3>.然后在点.上面的信息都是随便填的。填完了过后点击继续,保存在磁盘上的随便某个位置,便于后面找的到。 6FF41F29-0D2C-4758-AAAA-4A371BBC8B99.png

8.然后在第七步后的choose file选择刚刚生成的证书,这样就算做好了,创建完了之后会有一个download,你点击下载到本地,然后双击它,它会自动的添加到你的钥匙串里面。
再按照这个步骤可以吧生产环境的推送证书也做好。

二:上传证书

刚刚创建好的证书下载好之后双击打开都会被放在钥匙串里面,这时候需要导出他们为.p12的证书,然后再上传到融云后台。
1.导出证书。

ECC1AFD8-11D5-4728-9A5C-84DBA71C0ECF.png

点击后输入名字,注意选择证书类型,在点击存储后为让你设置证书密码,可以设置也可以不设置,然后存储到本地。

3D05958E-7A8B-4603-B898-125B71BAB5A8.png

这样导出完成。
2.打开融云后台控制台,打开如下图

1D36BDB4-348F-4401-A4E1-51B072B98E36.png

上传刚刚导出的.p12证书,如果导出的时候有密码就输入密码,没有就不填,然后点击保存设置,他会提示你是否设置成功,设置成功2小时后会生效,你可以等2小时后测试。

三:代码设置

打开工程,在appdelegate的.m文件里面一次设置如下代码

    if ([application
         respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        //注册推送, 用于iOS8以及iOS8之后的系统
        UIUserNotificationSettings *settings = [UIUserNotificationSettings
                                                settingsForTypes:(UIUserNotificationTypeBadge |
                                                                  UIUserNotificationTypeSound |
                                                                  UIUserNotificationTypeAlert)
                                                categories:nil];
        [application registerUserNotificationSettings:settings];
    } else {
        //注册推送,用于iOS8之前的系统
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge |
        UIRemoteNotificationTypeAlert |
        UIRemoteNotificationTypeSound;
        [application registerForRemoteNotificationTypes:myTypes];
    }

/**
 * 推送处理2
//注册用户通知设置
- (void)application:(UIApplication *)application
didRegisterUserNotificationSettings:
(UIUserNotificationSettings *)notificationSettings {
    // register to receive notifications
    [application registerForRemoteNotifications];
}

/**
 * 推送处理3
 */
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *token =
    [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"
                                                           withString:@""]
      stringByReplacingOccurrencesOfString:@">"
      withString:@""]
     stringByReplacingOccurrencesOfString:@" "
     withString:@""];
    
    [[RCIMClient sharedRCIMClient] setDeviceToken:token];
}

需要注意的是,在工程里面需要打开推送开关


935FB218-0725-48D3-AE83-EFC463363F11.png

这样设置好2小时后就能真机测试了。

四:测试

可在融云后台测试推送,第一个地方是刚刚上传推送证书哪里有一个推送,还有一个后台有一个广播与推送也可以测试的。

如果2小时后测试推送没有效果,官方给了出排查故障文档
推送收不到,请参照文档一一排查:http://support.rongcloud.cn/kb/MzEy;

我们App有3种状态,分别是前台状态,后台活动状态和后台暂停状态。对于这三种状态,处理各不相同。

前台状态:顾名思义就是程序在前台可见,这时候如果收到新消息,会有铃声提示,没有通知栏。

后台活动状态:程序进入到后台后,我们设置了一个2分钟计时器。在超时之前都是活动状态,这时如果有人发消息,应用能够收到消息,这时会在通知栏通知,这种状态叫做本地通知。

后台暂停状态:计时器超时后,融云会断开服务器,进入到暂停状态。这时候如果有人给该用户发消息,是会走苹果的远程push的,会在通知栏显示通知。程序重新进入到前台状态后才会收下来消息。

···
远程推送内容的获取

点击通知栏的远程推送时,如果此时 App 已经被系统冻结,则您在 AppDelegate 的 -application:didFinishLaunchingWithOptions: 中可以捕获该消息。

// AppDelegate class

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 远程推送的内容
    NSDictionary *remoteNotificationUserInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];

    ...

    return YES;
}

如果 App 未被系统冻结,则您在 AppDelegate 的 -application:didReceiveRemoteNotification: 中可以捕获该消息。

// AppDelegate class

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo {
    // userInfo为远程推送的内容
}

···

上一篇 下一篇

猜你喜欢

热点阅读