jpush(极光)推送之 IOS 篇

本文介绍如何配置极光推送iOS版PhoneGap插件,包括修改配置文件、添加通知回调函数及初始化等步骤,适用于希望在iOS应用中集成极光推送功能的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

极光推送官方版的 phonegap 插件在这里。由于官方版插件 ios 版暂时没有打开通知的方法,所以在官方基础上修改了下,修改后的插件放在了这里,下面说明以修改后的插件为准。(感谢极光官方大神viper耐心帮助,同时也参考了下@lanceli大神的cnodejs-ionic项目)

极光账户设置部分可以参考小和尚的这篇分享。

下面主要说明项目代码部分修改。

新建一个 ionic项目

$ ionic start --id com.ionichina.ionicjpush ionic_jpush tabs

注:修改 id 为自己应用的 Bundle identifier

添加 IOS 平台

$ cd ionic_jpush
$ ionic platform add ios

安装插件

$ ionic plugin add https://github.com/DongHongfei/jpush-phonegap-plugin.git

等待时间比较长,你也可以像小和尚文章里介绍的先下载下来,再安装,但这个过程是跑不了的

(接下来,蛋疼的事情开始了)

修改配置
  • 修改: ionic_jpush\plugins\cn.jpush.phonegap.JPushPlugin\src\ios\PushConfig.plist 修改对应的APP_KEY和CHANNEL(渠道)

注意确保有如下代码,不然后面 Xcode 运行会警告:

<key>APS_FOR_PRODUCTION</key>
<string>0</string>
在 js 中添加通知实现
  .factory('Push', function() {
    var push;
    return {
      setBadge: function(badge) {
        if (push) {
          console.log('jpush: set badge', badge);
          plugins.jPushPlugin.setBadge(badge);
        }
      },
      setAlias: function(alias) {
        if (push) {
          console.log('jpush: set alias', alias);
          plugins.jPushPlugin.setAlias(alias);
        }
      },
      check: function() {
        if (window.jpush && push) {
          plugins.jPushPlugin.receiveNotificationIniOSCallback(window.jpush);
          window.jpush = null;
        }
      },
      init: function(notificationCallback) {
        console.log('jpush: start init-----------------------');
        push = window.plugins && window.plugins.jPushPlugin;
        if (push) {
          console.log('jpush: init');
          plugins.jPushPlugin.init();
          plugins.jPushPlugin.setDebugMode(true);
          plugins.jPushPlugin.openNotificationInAndroidCallback = notificationCallback;
          plugins.jPushPlugin.receiveNotificationIniOSCallback = notificationCallback;
        }
      }
    };
  });

在 app.js 的 run 函数里定义通知回调函数

记得在 run 函数里引用 Push 先

  // push notification callback
  var notificationCallback = function(data) {
    console.log('received data :' + data);
    var notification = angular.fromJson(data);
    //app 是否处于正在运行状态
    var isActive = notification.notification;

    // here add your code


    //ios
    if (ionic.Platform.isIOS()) {
      window.alert(notification);

    } else {
    //非 ios(android)
    }
  };

在 $ionicPlatform.ready 里进行初始化

//初始化
Push.init(notificationCallback);
//设置别名
Push.setAlias("12345678");
编译 IOS 项目

$ ionic build ios

(接下来,更蛋疼的事情开始了)

修改配置 IOS 项目(不要问我为啥)
  • 修改 AppDelegate.m, 添加
#import "APService.h"
#import "JPushPlugin.h"  //viper

didFinishLaunchingWithOptions函数中添加


    // Required
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //可以添加自定义categories
        [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                       UIUserNotificationTypeSound |
                                                       UIUserNotificationTypeAlert)
                                           categories:nil];
    } else {
        //categories 必须为nil
        [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                       UIRemoteNotificationTypeSound |
                                                       UIRemoteNotificationTypeAlert)
                                           categories:nil];
    }
#else
    //categories 必须为nil
    [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                   UIRemoteNotificationTypeSound |
                                                   UIRemoteNotificationTypeAlert)
                                       categories:nil];
#endif
    // Required
    [APService setupWithOption:launchOptions];

didRegisterForRemoteNotificationsWithDeviceToken中添加

// Required
[APService registerDeviceToken:deviceToken];
[APService setDebugMode];

添加函数

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    // Required
    [APService handleRemoteNotification:userInfo];
    BOOL isActive;
    if (application.applicationState == UIApplicationStateActive) {
        isActive = TRUE;
    } else {
        isActive = FALSE;
    }
    NSDictionary *dict=[[NSMutableDictionary alloc] initWithDictionary:userInfo];
    
    [dict setValue: [[NSNumber alloc] initWithBool:isActive] forKey:@"isActive" ];
    
    [[NSNotificationCenter defaultCenter] postNotificationName:kJPushPlugReceiveNotificaiton
                                                        object:dict] ;//viper
    
    
}
OC 代码算是完事儿,然后就是配置
  • 修改项目 Capabilities,打开 Background Modes,勾选最后一项Remote notications
  • 设置证书,这个就不教了,网上一大堆
  • Xcode 这边就算配置完了

接下就是设置一些Xcode常规操作,编译运行,从极光官方控制台发送一条通知,然后查看Xcode控制台,应该就会有推送的通知数据打印了。下面的事儿你自己应该搞的定。

示例代码我放在了这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值