极光征文|如何通过cocoapods轻松管理项目中的极光推送业务

极光征文|通过cocoapods管理项目中的极光推送业务

第三方业务繁多带来的问题

        随着公司业务的不断扩展,开发工作中要面临的业务耦合问题越来越严重,一处修改全局生效的方案也越来越不能满足代码更新的需要,为了避免过多的二次coding,就要考虑去耦合。将各个小的业务逐渐从主业务代码中剥离出来成为一个独立的单元来管理,变得越来越迫切。在iOS开发行业中,很多优秀的组件化方案层出不穷,在这个过程中,不可避免的会接入第三方业务,由于第三方业务的接入,可能会导致某些功能在项目中到处引用,一旦发生变动,就需要全局找代码修改,因此,第三方库的组件化管理也将变得越来越重要。

对于极光推送业务API管理的一些想法

        前几天更新了一个老项目里面的SDK,其中就包含极光推送的SDK,由于这块业务很少会发生变动,期间一直没有留意过,更新之后就发现,很多古老的API都废弃了,崩溃,项目中相关的API使用也有蛮多的,查看了相关的代买自后,发现,变化不是特别大,那么我可以将相关的API根据自身的业务需要进行二次封装(这里就不提了,本篇文章着重组件化)。随后又想了一下,如果以后再有类似的更新怎么办呢?我总不能每次都在主工程找代码改吧?那么组件化管理的方案首先就进入了我的脑海,毕竟前段时间将其他的SDK一股脑儿的全都从主工程干掉了,但是还没有将极光推送业务放进来,那正好收拾一下这一块。

使用cocoapods将极光推送业务进行组件化

    首先把业务代码给写好,那么不废话,先上代码

    JPushApiManagerDelegate 继承`JPUSHRegisterDelegate`协议,以方便扩展协议

@protocol JPushApiManagerDelegate <JPUSHRegisterDelegate>

@end

* JPushApiManager 单利设计,同事提供注册业务API,注册极光服务只需一个API即可

@property (nonatomic, weak ) id<JPushApiManagerDelegate> delegate;

+ (instancetype)sharedManager;

/**

注册极光服务

@param appKey appKey

@param launchOptions launchOptions

@param delegate delegate

*/

- (void)setJPushAppKey:(nonnull NSString *)appKey didFinishLaunchingWithOptions:(nonnull NSDictionary *)launchOptions delegate:(nonnull id<JPushApiManagerDelegate>)delegate;

@end

* APPDelegate

一行代码即可搞定,didfinishlaunching方法中的代码尽可能保持干净

#import "AppDelegate.h"

#import "JPushApiManager.h"

static NSString * const JPushAppKey = @"在这里填写你的极光推送AppKey";

@interface AppDelegate ()<JPushApiManagerDelegate>

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [[JPushApiManager sharedManager] setJPushAppKey:JPushAppKey didFinishLaunchingWithOptions:launchOptions delegate:self];

    return YES;

}

JPUSHRegisterDelegate 写到APPdelegate里

// iOS 10 Support

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

    // Required

    NSDictionary * userInfo = notification.request.content.userInfo;

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

        [JPUSHService handleRemoteNotification:userInfo];

    }

    completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

}

// iOS 10 Support

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    // Required

    NSDictionary * userInfo = response.notification.request.content.userInfo;

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

        [JPUSHService handleRemoteNotification:userInfo];

    }

    completionHandler();

}

// iOS 12

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(nullable UNNotification *)notification {


}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    // Required, iOS 7 Support

    [JPUSHService handleRemoteNotification:userInfo];

    completionHandler(UIBackgroundFetchResultNewData);

}

* 至此,相关的编码工作就完成了,接下来就是使用cocoapods将代码进行组件化管理

在工程根目录下运行如下代码

$ pod spec create JPushApiManager

$ vim JPushApiManager.podspec

修改.podspec文件内容如下

Pod::Spec.new do |s|

  s.name        = "JPushApiManager"

  s.version      = "3.1.2.1"

  s.summary      = "组件化方式管理极光推送代码"

  s.description  = <<-DESC

                    组件化方式管理极光推送代码,以方便代码中一处修改全局生效

                  DESC

  s.homepage    = "https://github.com/XFNicar/JPushApiManager"

  s.license      = { :type => "MIT", :file => "LICENSE" }

  s.author            = { "XieFei" => "xuejingwen25@163.com" }

  s.platform    = :ios, "9.0"

  s.source      = { :git => "https://github.com/XFNicar/JPushApiManager.git", :tag => "#{s.version}" }

  s.source_files  = "JPushApiManager/JPushApiManager/*.{h,m}"

  s.requires_arc = true

  # s.ios.vendored_libraries = 'libs/*.a'

  s.dependency "JPush", "~> 3.1.2"

end

提交代码

$ git add .

$ git commit -m "nothing"

$ git push origin master

$ git tag -a 3.1.2.1 -m "发布3.1.2.1版本"

$ git push origin --tags

校验.podspec文件的正确性

$ pod lib lint --use-libraries --allow-warnings

发布代码

$ pod trunk push JPushApiManager.podspec

看到如下效果就说明发布成功了

--------------------------------------------------------------------------------

🎉  Congrats

🚀  JPushApiManager (3.1.2.1) successfully published

📅  January 20th, 23:10

🌎  https://cocoapods.org/pods/JPushApiManager

👍  Tell your friends!

--------------------------------------------------------------------------------

在工程中导入代码

pod 'JPushApiManager', '~> 3.1.2.1'

说在后面

至此极光推送业务组件化管理的相关工作就结束了,组件化带来的好处是很明显的,此次组件化的目的有三点:

1. 如果项目中有部分需要主动触发推送业务的代码,那么就可以统一定制API,防止官方API发生改变之后,需要重新搜索代码来修改。

2. 将业务进行剥离,可以单独在一个模块里管理极光推送业务。

3. 让项目中代码更加干净整洁。

4. 装逼。。。2333333

「本文为极光征文参赛文章」

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容