2.iOS苹果推送-一些示例代码和注意的问题
2015-09-01 16:52
1016 查看
1. 程序启动时每次收到推送 或 程序未启动通过推送消息启动程序时,都将会触发appdelegate里面的方法(注意要跟服务器的证书一直,比如开发环境,服务器也要用开发证书的pem才行):
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//////////这里是收到推送后的逻辑代码
// 需要 #import
AudioServicesPlaySystemSound(1007); //系统的通知声音
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);//震动
//自定义声音
NSString *path = [[NSBundle
mainBundle] pathForResource:@"message" ofType:@"wav"];
//组装并播放音效
SystemSoundID soundID;
NSURL *filePath = [NSURL
fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath,
&soundID);
AudioServicesPlaySystemSound(soundID);
//声音停止
AudioServicesDisposeSystemSoundID(soundID);
}
userInfo默认包含以下内容:
aps = {
alert = "";//推送显示的问题信息在这里
badge = 0;//app的icon右上角的推送数字 在这里设置
sound = "";
};
如果需要添加自定义的字段,就让服务器的小伙伴们 跟aps同一层级添加一个数组(以Json为例):
{
"aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" },
"server" : { "serverId" : 1, "name" : "Server name")
}
launchOptions中会有推送消息的userInfo信息,此时我们可以通过
获得推送消息内容。如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性
用于标识用户是否通过点击通知消息进入本应用。
此时,
一定会被调用,iOS7可以使用
因为此方法的调用时,MainViewController已经被初始化,所以我们已经可以在MainViewController注册推送消息的监听,用于展示对应的视图,如下:
所以在AppDelegate的didReceiveRemoteNotification中可以通过判断isLaunchedByNotification来通知不同的展示方法。
退出登录后使用[[UIApplication sharedApplication] unregisterForRemoteNotifications];//注销推送消息
友盟详细解释:
如果 App 状态为未运行,此函数将被调用,如果launchOptions包含UIApplicationLaunchOptionsLocalNotificationKey表示用户点击apn 通知导致app被启动运行;如果不含有对应键值则表示 App 不是因点击apn而被启动,可能为直接点击icon被启动或其他。
如果 App状态为正在前台或者后台运行,那么此函数将被调用,并且可通过AppDelegate的applicationState是否为UIApplicationStateActive判断程序是否在前台运行。此种情况在此函数中处理:
如果是使用 iOS 7 的 Remote Notification 特性那么处理函数需要使用--该特性见博文4
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//////////这里是收到推送后的逻辑代码
// 需要 #import
AudioServicesPlaySystemSound(1007); //系统的通知声音
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);//震动
//自定义声音
NSString *path = [[NSBundle
mainBundle] pathForResource:@"message" ofType:@"wav"];
//组装并播放音效
SystemSoundID soundID;
NSURL *filePath = [NSURL
fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath,
&soundID);
AudioServicesPlaySystemSound(soundID);
//声音停止
AudioServicesDisposeSystemSoundID(soundID);
}
userInfo默认包含以下内容:
aps = {
alert = "";//推送显示的问题信息在这里
badge = 0;//app的icon右上角的推送数字 在这里设置
sound = "";
};
如果需要添加自定义的字段,就让服务器的小伙伴们 跟aps同一层级添加一个数组(以Json为例):
{
"aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" },
"server" : { "serverId" : 1, "name" : "Server name")
}
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
launchOptions中会有推送消息的userInfo信息,此时我们可以通过
NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
获得推送消息内容。如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性
@property (nonatomic) BOOL isLaunchedByNotification;
用于标识用户是否通过点击通知消息进入本应用。
此时,
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
一定会被调用,iOS7可以使用
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void
(^)(UIBackgroundFetchResult))completionHandler
因为此方法的调用时,MainViewController已经被初始化,所以我们已经可以在MainViewController注册推送消息的监听,用于展示对应的视图,如下:
//订阅展示视图消息,将直接打开某个分支视图[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentView:) name:@"PresentView" object:nil];//弹出消息框提示用户有订阅通知消息。主要用于用户在使用应用时,弹出提示框[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNotification:) name:@"Notification" object:nil];
所以在AppDelegate的didReceiveRemoteNotification中可以通过判断isLaunchedByNotification来通知不同的展示方法。
退出登录后使用[[UIApplication sharedApplication] unregisterForRemoteNotifications];//注销推送消息
友盟详细解释:
如果 App 状态为未运行,此函数将被调用,如果launchOptions包含UIApplicationLaunchOptionsLocalNotificationKey表示用户点击apn 通知导致app被启动运行;如果不含有对应键值则表示 App 不是因点击apn而被启动,可能为直接点击icon被启动或其他。
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions; // apn 内容获取:NSDictionary *remoteNotification = [launchOptionsobjectForKey: UIApplicationLaunchOptionsRemoteNotificationKey] |
- ( void )application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo; // apn内容为userInfo |
- ( void )application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary *)userInfofetchCompletionHandler:( void (^)(UIBackgroundFetchResult))completionHandler; // apn内容为userInfo |
相关文章推荐
- 1.iOS中的系统通知 自定义推送声音
- IOS开发-视频,音频,录音简单总结
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- IOS中nil/Nil/NULL的区别
- iOS-Quartz2D绘图的基础用法总结
- iOS中socket的使用
- iOS 设置导航栏 Navigationbar相关信息
- IOS-添加分段控件SegmentControl
- IOS时间与日期处理
- iOS读取本地txt文件为乱码的解决方法
- iOS 软件中所有动画突然不能正常显示(系统自带的动画也成了一闪而过)
- ios 用NSUserDefaults做本地化搜索记录
- 苹果开发 笔记(68)MBProgressHUD
- iOS开发日记13-原生二维码的扫描和生成
- iOS GCD使用指南
- iOS中的round/ceil/floorf函数略解
- [iOS] iOS开发埋坑之路(一)
- 【IOS开发】实时显示摄像头内容
- TUTK p2p视频流H.264 iOS平台解码成功
- ios与js 交互