主要方法:

//自定义推送
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary * userInfo = [notification userInfo];//
NSString *contentUser = [userInfo valueForKey:@"content"];//content:获取推送的内容
NSDictionary *extras = [userInfo valueForKey:@"extras"];//extras:获取用户自定义参数
NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服务端传递的Extras附加字段,key是自己定义的 customizeField1:根据自定义key获取自定义的value
NSLog(@"接收到自定义通知 content = %@,extras = %@,customizeField1 = %@",contentUser,extras,customizeField1);
//极光自定义通知
JPushNotificationContent *content = [[JPushNotificationContent alloc] init];
//content.title = @"Test Notifications";
//content.subtitle = @"2016";
content.body = contentUser;
content.badge = @;
content.categoryIdentifier = @"Custom DAKQQSB DingDan";
content.sound = @"test.caf";
// 5s后提醒 iOS 10 以上支持
JPushNotificationTrigger *trigger1 = [[JPushNotificationTrigger alloc] init];
if(IOS10_OrLater)
{
trigger1.timeInterval = 0.001;
}
else
{
//5s后提醒,iOS10以下支持
trigger1.fireDate = [NSDate dateWithTimeIntervalSinceNow:];
} JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
request.requestIdentifier = content.categoryIdentifier;
request.content = content;
request.trigger = trigger1;
request.completionHandler = ^(id result) {
NSLog(@"极光推送结果返回:%@", result);
};
[JPUSHService addNotification:request];
if([self runningInForeground])
{
NSLog(@"推送前台 推送前台");
}
}

但是要注意的是,自定义通知时,只有程序在后台运行才有提示音,程序在前台运行时只有提示,没有声音,所以需要在前台自己设置播放声音.不知道还有没有其他解决办法

//判断前台
-(BOOL) runningInForeground
{
UIApplicationState state = [UIApplication sharedApplication].applicationState;
BOOL result = (state == UIApplicationStateActive); return result;
}
//播放音乐
-(void)playSound{
SystemSoundID soundID;
//NSBundle来返回音频文件路径
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"caf"];
//建立SystemSoundID对象,但是这里要传地址(加&符号)。 第一个参数需要一个CFURLRef类型的url参数,要新建一个NSString来做桥接转换(bridge),而这个NSString的值,就是上面的音频文件路径
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
//播放提示音 带震动
AudioServicesPlayAlertSound(soundID);
//播放系统声音
// AudioServicesPlaySystemSound(soundID);
}
-----------错误记录


Undefined symbols for architecture i386:

"_OBJC_CLASS_$_JPUSHRegisterEntity", referenced from:

objc-class-ref in AppDelegate.o

"_OBJC_CLASS_$_JPUSHService", referenced from:

objc-class-ref in LoginViewController.o

objc-class-ref in AppDelegate.o

ld: symbol(s) not found for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因查了很多地方,后来才发现只是因为打包时把product-schemes-run的环境改成release了,改回debug就没这个错误了.

IOS 极光推送自定义通知遇到的一些坑的更多相关文章

  1. (转载)iOS 极光推送SDK 集成指南

    iOS SDK 集成指南 使用提示 本文匹配的 SDK版本:r1.2.5 以后. 查看最近更新了解最新的SDK更新情况. 产品功能说明 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能 ...

  2. iOS极光推送

    昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...

  3. iOS极光推送的基本使用

    昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...

  4. iOS 极光推送 如何点击推送消息跳转页面

    假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...

  5. iOS极光推送SDK的使用流程

    一.极光推送简介 极光推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,整合了iOS.Android和WP平台的统一推送服务.使用起来方便简单,已于集成,解决了原生远程推送繁 ...

  6. iOS - 极光推送证书的创建及过期处理

    无论iPhone还是安卓,我们用到的所有应用基本都有推送通知服务,因为这是应用很好的推广方式,有新产品了.有新更新了通知下用户及时查看.但Apple有点特殊,它的推送需要发到苹果服务器上中转一下,这就 ...

  7. ios -- 极光推送《1》

    昨天公司项目要加入远程推送功能,自己做显然会很麻烦,所以用了极光的远程推送,下面我会讲如何制作推送证书并使用极光推送进行远程推送. 先讲讲怎么下载推送证书吧(前面的很简单要是知道的可以直接往下滑,简书 ...

  8. iOS极光推送,两次Bundleid不一致( 开发证书没有通过验证 是否重新上传证书)的解决方案

    极光在配置ios端推送时,需要上传p12证书,如果遇到如下图:: 证书上传未通过的原因一般有: 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候 ...

  9. 关于ios极光推送server端注意的地方

    今天试用了极光推送API 用它是因为,大多数人说它的文档是最全的,但是用过之后,发现关于IOS的文档,还是很不够,导致走了一点弯路! 特别是服务端的代码:https://github.com/jpus ...

随机推荐

  1. 关于spark写入文件至文件系统并制定文件名之自定义outputFormat

    引言: spark项目中通常我们需要将我们处理之后数据保存到文件中,比如将处理之后的RDD保存到hdfs上指定的目录中,亦或是保存在本地 spark保存文件: 1.rdd.saveAsTextFile ...

  2. Confluence 6 超过当前许可证期限进行升级

    这个页面将会对你在进行 Confluence 升级的时候超过了当前许可证的期限进行升级的情况. 许可证警告 在升级的过程中,你将会在 Confluence 的应用程序日志(log file)中看到类似 ...

  3. 安装weblogic

    附:wls1036_generic.jar 链接:https://pan.baidu.com/s/1W5g-SHeKL96yrOeDKJJoxw 提取码:vxft 注:以下安装步骤是一个前辈整理的,我 ...

  4. C# 数组,对象实例化并赋值

    [数组] 数组实例化,并赋值时,可以省略new[]. ]; --未赋值 ,}; --赋值 [对象] 对象实例化,并赋值时,可以省略(). class test { public string name ...

  5. 将对象转成 json 以及 将字符串 hash(SHA1) 加密

    如下: /// <summary> /// 生成 Json /// </summary> /// <param name="obj"></ ...

  6. h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)

    h5微信页面在手机微信和微信开发者工具中都能正常显示,但是在pc端微信浏览器上打不开或者数据加载不出来. 原因:pc端微信浏览器不支持ES6语法,我的代码中使用了一些ES6的特性 解决:将ES6转换为 ...

  7. 基于JDK1.8版本的hashmap源码笔记(二)

    这一篇是接着上一篇写的, 上一篇的地址是:基于JDK1.8版本的hashmap源码分析(一)     /**     * 返回boolean类型的值,当集合中包含key的键值,就返回true,否则就返 ...

  8. javascript 十进制转换为二进制

    1.十进制转换为二进制 var toBin = (n) => { if(n == 0) return '0'; var res = ''; while(n != 0) { res = n % 2 ...

  9. Qt 适合做界面

    确实感觉的Qt的界面开发相比MFC方便了许多,不用为设计和实现窗口烦恼.不需要太细研究界面的实现,从Qt自带的例子中就能轻松学习和应用.在界面开发上Qt的实用比MFC前进了许多.做C++开发不管怎样如 ...

  10. YML文件中ipv6地址输入格式

    关于YML文件格式可以百度,这里只说ipv6:yml文件是注重格式的不能用tab键代替空格 ipv4 :10.1.202.9 ipv6: 2001:202::6e4:f32b:c19c:4760 端口 ...