iOS-42-苹果推送路由的设计思考

前记

公司现在的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

你可能感兴趣的:(iOS-42-苹果推送路由的设计思考)