前言:自己摸索研究友盟消息推送功能,Android和ios平台均测试通过。记录下来以备忘。中间踩了不少坑,尤其是ios关于证书的坑。友盟官方文档Android部分写得比较详尽,ios部分写得比较烂。本篇是cocos2d-x集成友盟消息推送功能的ios部分,Android部分请见另一篇。
省略的内容
- 什么是友盟
- 注册友盟账号
- [申请开通友盟消息推送服务]
- [下载友盟消息推送SDK(ios)]
注意:如果你的应用中没有集成广告内容,根据说明,请下载无IDFA的SDK。否则应用发布到AppStore可能被拒。 Apple新规定采集IDFA(identifier for advertising)必须要有广告。
基本工作完成后,下面正式开始。
创建项目的App ID
创建SSL证书请求文件
创建并安装SSL证书
生成Provisioning Profile文件
在友盟消息推送管理后台创建App,获取AppKey
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+
打开*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文件。
至此,消息推送基本功能的集成已经完成。
测试消息推送功能
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.选择【测试消息】
创建消息后,发送,你的测试手机上就可以收到刚刚推送的消息了。