使用极光/友盟推送,APP进程杀死后为啥收不到推送
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用极光/友盟推送,APP进程杀死后为啥收不到推送相关的知识,希望对你有一定的参考价值。
参考技术A 在ios系统上面如果使用极光的自定义消息,在app杀死之后是接收不到的.
在android系统上面,极光推送实际上使用的还是socket长连接维持推送通道的,
当手机中的极光socket全部断开之后就无法接收推送了.
全部断开是指所有使用了极光SDK的app,
假设A,B都使用了极光SDK,那么当B杀死A保留的情况下,依然可以接收B的推送;当AB全部关闭则无法接收.
项目实战:iOS极光推送集成(30分钟搞定)
推送有非常多,如个推、友盟、融云和极光等等。在这里就讲下怎样使用极光推送。
主要内容是将官方文档资料详细汇总并一步一步集成到项目中,您也能够直接去官方文档阅览。
极光推送SDK下载
直接打开官方文档下载最新的SDK
极光网创建APP并上传证书
一、制作推送证书和描写叙述文件:须要注意要制作两个证书,一个是測试证书,一个是公布证书,详细看官方文档截图:点击查看证书制作
直接看《iOS 证书 设置指南》其它的不用看了,废话太多
二、在极光推送官网注冊你的APP吧。
bundle id要和你项目一直,假设是測试就选择开发环境。上线后再切换下就能够了;开发环境和生产环境的证书千万别弄混了。是p12文件,还有password的。
项目配置问题
1、直接将SDK中的lib目录拖到项目中,里面主要是两个文件,.a静态安装包和.h文件。还有Demo中一个声音文件要加入。
2、加入必要的框架
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
Adsupport.framework (获取IDFA须要)
Xcode7须要的是libz.tbd;Xcode7下面版本号是libz.dylib
3、假设SDK是2.1.0后的,直接编译,假设报错,会有一个bitcode错误,直接到Build Settings 关闭 bitCode 选项;
假设还有报错,看下是否是由于找不到.a的静态库。把静态库地址拖过去就能够了。
4、假设是老版本号的,SDK1.8.8创建并配置PushConfig.plist文件,如图
假设是最新的SDK,直接跳过了。直接忽视这条就能够了
5、假设用的是Xcode7时,须要在App项目的plist手动加入下面key和值以支持http传输:
1.在Info.plist中加入NSAppTransportSecurity类型Dictionary。
2.在NSAppTransportSecurity下加入NSAllowsArbitraryLoads类型Boolean,值设为YES
注意:不是单元測试的info.plist
6、打开推送设置
7、打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:
项目代码
你也能够直接在第一步的SDK中查看详细的Demo。
在Appdelegate.h导入头文件
#import <AdSupport/AdSupport.h>
#import "JPUSHService.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}
[JPUSHService setupWithOption:launchOptions appKey:JPushAPPKEY
channel:channel
apsForProduction:isProduction
advertisingIdentifier:advertisingId];
}
setupWithOption 方法中须要的參数
appkey:注冊的APPkey,站点上找去吧
channel:随便写个字符串吧。也没事
advertisingIdentifier:广告标识符,(苹果都废弃了,这厮还要,哎)
apsForProduction:BOOL值,区分是开发环境还是測试环境
接下来是几个回调函数设置下就能够了
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[application setApplicationIconBadgeNumber:0];
[application cancelAllLocalNotifications];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
[JPUSHService registerDeviceToken:deviceToken];
NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);
}
- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSLog(@"8.0收到通知:%@",[self logDic:userInfo]);
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
详细API參考详细版本号SDK。我的SDK是2.1.5,最新的哦!
completionHandlez作用主要是2个:
1、并依据传递的UIBackgroundFetchResult 參数记录新数据是否可用
2、调用完毕的处理代码时。应用的界面缩略图会自己主动更新
測试推送
好了,你如今在真机跑下项目,然后就能够去极光站点測试你的推送是否成功了(app在后台或者锁屏状态下都能够收到通知的)
问题汇总
假设控制台没有打印出你的消息,说明你有问题了。
不要急。看下官方的问题汇总吧,反正你依照上面做的,保证没问题的哦,》》》》》》问题汇总
以上是关于使用极光/友盟推送,APP进程杀死后为啥收不到推送的主要内容,如果未能解决你的问题,请参考以下文章