前言:自己摸索研究友盟消息推送功能,Android和ios平台均测试通过。记录下来以备忘。中间踩了不少坑,尤其是ios关于证书的坑。友盟官方文档Android部分写得比较详尽,ios部分写得比较烂。本篇是cocos2d-x集成友盟消息推送功能的ios部分,Android部分请见另一篇。

省略的内容

  • 什么是友盟
  • 注册友盟账号
  • [申请开通友盟消息推送服务]
  • [下载友盟消息推送SDK(ios)]

注意:如果你的应用中没有集成广告内容,根据说明,请下载无IDFA的SDK。否则应用发布到AppStore可能被拒。 Apple新规定采集IDFA(identifier for advertising)必须要有广告。

基本工作完成后,下面正式开始。

创建项目的App ID

1.登陆官网 Apple Developer Member Center进入 Certificates,Identifiers & Profiles,点击 Certificates,从左边栏点击App IDs。
2.选择➕,进入创建新App ID页面,选择Explicit App ID,勾选Push Notifications复选框。注意bundle ID中不要有*号。
3.点击continue,然后submit。

到此,App ID就创建好了。


创建SSL证书请求文件

1.打开Mac的钥匙串访问应用,从菜单栏创建证书请求文件


2.输入名字和邮件,CA邮件地址默认。
3.选择“保存到硬盘”,将证书请求文件下载到桌面。可以看到证书请求文件的后缀为.certSigningRequest。

创建并安装SSL证书

1.进入官网,点击左边栏的App IDs,找到之前创建的App ID,点击Edit。进入App ID编辑页面。
2.创建SSL证书




因为我这里是做测试,因此选择 Development SSL Certificate,如果是发布App,选择ProductionSSL Certificate
(我这里已经创建过证书了,所以有revoke和download 按钮。)点击create certificate...------->Continue----->Choose File...这里选择刚刚请求到的.certSigningRequest证书请求文件。
3.生成证书,下载到电脑中。
4.双击证书,安装到keychain。
5.在keychain"我的证书"选项页面,找到刚刚安装的名称形如 “Apple Development IOS Push Services: xxx”的证书。右键导出。输入自定义密码。保存.p12文件。

生成Provisioning Profile文件

Provisioning Profile与App ID和移动设备(手机)的UUID关联。Provisioning Profile会验证运行所开发应用的设备。而且不管你是新建一个App ID还是去修改现成的,都得重新生成并安装一遍Provisioning Profile。
1.在Apple官网左边栏选择 Provisioning Profiles下的All
2.点击➕创建一个Provision Profile,填写Profile文件名,选择好App ID,Apple开发者/发布者账号以及设备的UUID(如果列表中没有使用的设备的UUID,请在左边栏的Devices中添加)
3.点击genarate生成并下载.mobileprovision文件。双击安装。


在友盟消息推送管理后台创建App,获取AppKey

要使用友盟的消息推送功能,需要在友盟消息推送后台创建一个App,友盟会帮你生成一个唯一的AppKey,用于识别你发布的应用。
下面来操作。
1.进入友盟消息推送管理后台,点击【添加应用】



2.填写应用信息。



如果做开发测试,选择【开发证书】,并把之前生成的.p12文件上传上去。

最后添加,就能看到生成的AppKey和App Master Secret了。




现在到了写代码的时候了。


xCode项目中集成友盟推送SDK

1.把事先下载的 UMessage_Sdk_All_x.x.x.zip解压缩

2.把UMessage_Sdk_x.x.x文件夹复制到项目工程目录中,



3.用xCode打开项目。

  • 请在你的工程目录结构中,右键选择Add->Existing Files…,选择这个文件夹。或者将这个文件夹拖入XCode工程目录结构中,在弹出的界面中勾选copy items into destination group's folder(if needed),并确保Add To Targets勾选相应的target。

  • 配置(可选)

    • SDK采用ARC管理内存,非ARC项目也是默认支持
    • 如果您使用了-all_load,可能需要添加libz的库:
      TARGETS-->Build Phases-->Link Binary With Libraries-->+-->libz.dylib

    说明
    SDK支持iOS 4.3+

4.添加代码:

打开*AppDelegate.m,依次按照以下步骤集成:

  • didFinishLaunchingWithOptions中的设置

[UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];
填入在友盟推送中心申请到的AppKey。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //set AppKey and AppSecret
    [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];

    //register remoteNotification types

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

    //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];


    //for log(optional)
    [UMessage setLogEnabled:NO];

    return YES;
}


    didRegisterForRemoteNotificationsWithDevicetoken中设置
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDevicetoken:(NSData *)devicetoken
{
    [UMessage registerDevicetoken:devicetoken];   
}

    didReceiveRemoteNotification中设置
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [UMessage didReceiveRemoteNotification:userInfo];
}


如需关闭推送,请使用 [UMessage unregisterForRemoteNotifications]


5.打开项目,在xCode的Build Settings页面的Code signing下的Code signing Identify设置开发者账号/发布者账号,在Provisioning Profile中选择之前创建并安装的的Profile文件。

至此,消息推送基本功能的集成已经完成。



测试消息推送功能

1.获取设备的Devicetoken。
Devicetoken每个设备都是唯一的。但是设备系统被擦除重装后会更改Devicetoken,因此,Devicetoken一般是不会变的。(注意,模拟器是没有Devicetoken的)
方法1:在 didRegisterForRemoteNotificationsWithDevicetoken 中添加如下语句
NSLog(@"%@",[[[[devicetoken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
                  stringByReplacingOccurrencesOfString: @">" withString: @""]
                 stringByReplacingOccurrencesOfString: @" " withString: @""]);
方法2:在 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中 开启UMessage的Log,然后寻找devicetoken的字段

/for log
  [UMessage setLogEnabled:YES];

以上任一方式都可在控制台获取一个长度为64的测试设备的Devicetoken串。


2.让测试的手机连接上网络,用xCode安装项目到手机。在控制台下找到Devicetoken.


2.进入友盟消息推送后台,选择之前创建的应用,选择左边栏的开发环境(我是在开发环境下做的消息推送测试),点击添加测试设备,设备描述填写你的设备类型,并填上刚刚获取的Devicetoken。





3.选择【测试消息】

创建消息后,发送,你的测试手机上就可以收到刚刚推送的消息了。

cocos2d-x集成友盟消息推送SDK(ios版)的更多相关文章

  1. HTML5实现直播间评论滚动效果的代码

    这篇文章主要介绍了HTML5实现直播间评论滚动效果的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  3. 利用Node实现HTML5离线存储的方法

    这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

    这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. AmazeUI 折叠面板的实现代码

    这篇文章主要介绍了AmazeUI 折叠面板的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. 前端监听websocket消息并实时弹出(实例代码)

    这篇文章主要介绍了前端监听websocket消息并实时弹出,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  9. HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码

    这篇文章主要介绍了HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  10. HTML5中的Web Notification桌面通知功能的实现方法

    这篇文章主要介绍了HTML5中的Web Notification桌面通知功能的实现方法,需要的朋友可以参考下

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部