使用极光/友盟推送,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进程杀死后为啥收不到推送的主要内容,如果未能解决你的问题,请参考以下文章

使用极光/友盟推送,APP进程杀死后为啥收不到推送

flutter APP 极光推送引入后 权限问题

Android app消息推送 百度 极光 个推 信鸽哪个好一些

iOS 极光推送诶配置成功却收不到推送消息的处理

远程(离线)推送自定义推送声音,友盟极光

iOS开发——iOS10升级极光推送SDK友盟分享SDK