lsvih
lsvih
  • 发布:2016-08-02 20:38
  • 更新:2020-12-09 09:46
  • 阅读:12715

IOS集成极光推送JPush

分类:5+ SDK

DCloud的webapp解决方案功能强大,但是官方所集成的是个推并且版本非常老,许多功能(比如说别名推送等等)不能使用,因此为它集成JPush(极光推送)。
集成具体方法如下:

1、下载极光sdk

在极光官方网站下载极光推送ios sdk 网址:http://docs.jiguang.cn/resources/

将其库文件(如下图所示)提取出来,

将其导入Hbuilder XCode工程的Frameworks中(如下图所示)

(1)导入步骤1

(2)导入步骤2

2、添加文件

在inc/tools(或其它文件夹)下建立文件PGJiguanPush.h与PGJiguanPush.m,内容见附件jpush-hbuilder.zip

(根据业务需求,没有具体写自定义消息的方法,只使用了标准消息,如果有需要可以自己弄)

3、增加全局描述

在Supporting Files目录下找到pch文件,在文件最后加上

static NSString *appKey = @"你的appkey";// appkey,极光创建app时能拿到  
static NSString *channel = @"0";// App Store等渠道,乱填也行~  
static BOOL isProduction = 0; //值要与Build Settings的Code Signing配置的证书环境一致 0开发 1生产

4、添加注册、接收等方法
参考极光官方文档,网址:http://docs.jiguang.cn/guideline/ios_guide/
修改inc/AppDelegate.m如下:

(1)在头部添加引用

import "JPUSHService.h"

(2)在官方注释"程序启动时收到push消息"的代码做如下修改:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{  
    // 设置当前SDK运行模式  
    BOOL ret = [PDRCore initEngineWihtOptions:launchOptions  
                                  withRunMode:PDRCoreRunModeNormal];  
    [JPUSHService registerForRemoteNotificationTypesUIUserNotificationTypeBadge |  
                                                      UIUserNotificationTypeSound |  
                                                      UIUserNotificationTypeAlert)  
                                          categories:nil];  
    [JPUSHService setupWithOption:launchOptions appKey:appKey  
                          channel:channel  
                 apsForProduction:isProduction  
            advertisingIdentifier:nil];  
    return ret;  
}

(3)官方注释“远程push注册成功收到DeviceToken回调”的代码做如下修改:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventRevDeviceToken withObject:deviceToken];  
    [JPUSHService registerDeviceToken:deviceToken];  
}

(4)官方注释“远程push注册失败”的代码做如下修改:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error  
{  
    [PDRCore handleSysEvent:PDRCoreSysEventRegRemoteNotificationsError withObject:error];  
    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);  
}  
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {  
    [PDRCore handleSysEvent:PDRCoreSysEventRevRemoteNotification withObject:userInfo];  
    [JPUSHService handleRemoteNotification:userInfo];  
    NSLog(@"JPush成功接收消息,可以在webview中获取了");  
}

5、在webview中获取推送事件
完成以上修改后,使用XCode运行APP可以在LOG中看到类似

2016-08-02 19:03:07.690 | JPUSH | I - [JPUSHDeviceTokenReport] upload device token success

的消息则说明极光推送已经集成成功,如果在极光推送后台统计页面可以看到此时的应用安装数量增加了1

由于是直接在AppDelegate.m的didReceiveRemoteNotification中写的[JPUSHService handleRemoteNotification:userInfo],因此消息直接传给了基座,可以直接在webview网页中用plus.push获取消息。

例如,我直接在index.html中写了

mui.plusReady(function() {  
   plus.push.addEventListener( "click", function ( msg ) {  
       alert( "用户点击了消息: " + JSON.stringify(msg) );  
   }, false );  
   plus.push.addEventListener( "receive", function ( msg ) {  
       alert( "app收到了消息: " + JSON.stringify(msg) );  
   }, false );  
});

6、测试
推送消息

静默推送与推送参数

2 关注 分享
lam mackes

要回复文章请先登录注册

bbjjfjf

bbjjfjf

你好作者,请问怎么触发 plus.push.addEventListener('receive', 事件呢。
2020-12-09 09:46
握瑾怀瑜

握瑾怀瑜

请问,uni-app的如何使用plus.push?
2019-05-30 17:19
1***@qq.com

1***@qq.com

请教一下ios应用在前台运行下不显示通知,怎么写才能给提示通知啊
2018-06-29 11:51
背归鸿

背归鸿

希望官方集成极光
2018-02-10 16:30
DCloud_heavensoft

DCloud_heavensoft

这个极光官方为HBuilder做的sdk:[https://github.com/jpush/jpush-hbuilder-demo](https://github.com/jpush/jpush-hbuilder-demo)
2017-10-02 22:29
lam

lam

有个问题,请教一下,通知是可以接收到,但自定义消息没有收到,是不是还少了什么没有配置?
2017-09-04 14:11
lam

lam

可以使用,非常感谢
2017-09-04 13:57
1***@139.com

1***@139.com

请问是否需要增加其他第三方依赖库,谢谢!
2017-07-31 14:38
c***@qq.com

c***@qq.com

检查再三,在设置当前SDK运行模式处有报语法错误,不知道怎么解决,求指导
2017-05-19 19:07
4***@qq.com

4***@qq.com

请问为什么。 在极光推送提供的 demo 中没有添加,相应的极光推送的代码。为什么onRevDeviceToken 也会被调用?
2017-04-25 18:28