iOS-42-苹果推送路由的设计思考
2019-05-30 本文已影响2人
小东门儿
前记
公司现在的APP需要集成推送,并根据推送事件指定跳转到相应的页面位置,而且还需要传递参数。
思考
现有的设计思路中可以结合组件间通信来做处理。
实现
通过路由链接或者字典传递。
样例demo
// {
// "router":"web",
// "action":"",
// param:{
// "url":"https://www.jianshu.com/p/8b6b40198473",
// }
// }
// {
// "router":"app",
// "action":"",
// param:{
// "a":"123",
// "b":"cici",
// "c":"nv",
// }
// }
router:主要是区分接收跳转后的跳转逻辑,app 项目内部跳转,web 跳转外部浏览器。
action:如果是app内部跳转,action就是相应的要跳转到的页面控制器名称
param:很明白就是跳转携带的参数
获取跟控制器
一般我们的项目都会有tabbar,直接获取tabbar的首页,直接作为跟控制器。
获取目标控制器
直接根据控制器名称生成控制器
- (NGBaseViewController*)applinkVC
{
id resultVC = nil;
NSString* className = self.moduleName;
Class pushVCClass = NSClassFromString(className);
BOOL isSubClass = [pushVCClass isSubclassOfClass:[NGBaseViewController class]];
if (isSubClass) {
resultVC = (NGBaseViewController*)[[pushVCClass alloc] init];
}
return resultVC;
}
提交参数
unsigned int outCount = 0;
objc_property_t * properties = class_copyPropertyList(pushVC.class , &outCount);
for (int i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
NSString *key = [NSString stringWithUTF8String:property_getName(property)];
NSString *param = parameters[key];
if (param != nil) {
[pushVC setValue:param forKey:key];
}
}
跳转
直接根据跟控制器和目标控制器跳转即可
demo下载地址 欢迎start
github:https://github.com/hbbdsqd/Router