BBASMPlugin+Navigation.h 12.5 KB
//
//  BBASMPlugin+Navigation.h
//  SWAN
//
//  Created by baidu on 2017/11/24.
//  Copyright © 2017年 baidu. All rights reserved.
//

/*
 Tips:
 1.navigateTo, redirectTo 只能打开非 tabBar 页面。
 2.switchTab 只能打开 tabBar 页面。
 3.reLaunch 可以打开任意页面。
 4.页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
 5.调用页面路由带的参数可以在目标页面的onLoad中获取。
 */

#import "BBASMPlugin.h"

#define BBASMNavigationModule                            @"mnp_navigation"

@interface BBASMPlugin (Navigation)

/**
 * 描  述: 保留当前页面,跳转到应用内的某个页面
 * 示  例: baiduboxapp://swanAPI/navigateTo?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_navigateto
 * 备  注:
 * ********** description ************
 * @name:      webView.navigateTo
 * @authority: swanAPI
 * @path:      /navigateTo
 * @args:      [{"name": "url", "value": "string"}, {"name": "initData", "value": "Object="}, {"name": "startTime", "value": "string="}, {"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.navigateTo"}}}
 */
- (void)navigateTo:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 关闭当前页面,跳转到应用内的某个页面
 * 示  例: baiduboxapp://swanAPI/redirectTo?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_redirectto
 * 备  注:
 * ********** description ************
 * @name:      webView.redirectTo
 * @authority: swanAPI
 * @path:      /redirectTo
 * @args:      [{"name": "url", "value": "string"}, {"name": "initData", "value": "Object="}, {"name": "startTime", "value": "string="}, {"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.redirectTo"}}}
 */
- (void)redirectTo:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
 * 示  例: baiduboxapp://swanAPI/switchTab?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_switchtab
 * 备  注:
 * ********** description ************
 * @name:      webView.switchTab
 * @authority: swanAPI
 * @path:      /switchTab
 * @args:      [{"name": "url", "value": "string"}, {"name": "startTime", "value": "string="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.url", "method": "_naSwan.bridge.postMessage"}}}
 */
- (void)switchTab:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 关闭当前页面,返回上一页面或多级页面
 * 示  例: baiduboxapp://swanAPI/navigateBack?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_navigateback
 * 备  注:
 * ********** description ************
 * @name:      webView.navigateBack
 * @authority: swanAPI
 * @path:      /navigateBack
 * @args:      [{"name": "delta", "value": "string"}, {"name": "startTime", "value": "string="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.navigateBack"}}}
 */
- (void)navigateBack:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 小程序关闭所有页面,打开到应用内的某个页面
 * 示  例: baiduboxapp://swanAPI/reLaunch?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_relaunch
 * 备  注:
 * ********** description ************
 * @name:      webView.reLaunch
 * @authority: swanAPI
 * @path:      /reLaunch
 * @args:      [{"name": "url", "value": "string"}, {"name": "initData", "value": "Object="}, {"name": "startTime", "value": "string="}, {"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.reLaunch"}}}
 */
- (void)reLaunch:(BBASchemeDispatcher *)dispatcher;


/**
 * 描  述: web化专用,小程序重启
 * 示  例: baiduboxapp://swanAPI/reLoadErrorPage?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_relaunch
 * 备  注:
 * ********** description ************
 * @name:      reLoadErrorPage
 * @authority: swanAPI
 * @path:      /reLoadErrorPage
 * @args:      [{"name": "invokeFrom", "value": "string"}]
 * @config:    {"swan": {"webdegrade": {"invoke": "swan.message.url", "handler": "bridge"}}}
 */
- (void)reLoadErrorPage:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 调起透明全屏弹窗页面
 * 示  例: baiduboxapp://swanAPI/showModalPage?params=\$params&callback=\$callback
 * 文  档: http://es.baidu-int.com/#/apidetail/1492
 * 备  注:
 * ********** description ************
 * @name:      showModalPage
 * @authority: swanAPI
 * @path:      /showModalPage
 * @args:      [{"name": "url", "value": "string"}, {"name": "initData", "value": "Object="}, {"name": "startTime", "value": "string="}, {"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.showModalPage"}}}
 */
- (void)showModalPage:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 退出全屏透明弹窗页面
 * 示  例: baiduboxapp://swanAPI/hideModalPage?params=\$params&callback=\$callback
 * 文  档: http://es.baidu-int.com/#/apidetail/1546
 * 备  注:
 * ********** description ************
 * @name:      hideModalPage
 * @authority: swanAPI
 * @path:      /hideModalPage
 * @args:      [{"name": "startTime", "value": "string="}, {"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.navigation.hideModalPage"}}}
 */
- (void)hideModalPage:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 退出当前小程序
 * 示  例: baiduboxapp://swanAPI/exit?callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_exit
 * 备  注:
 * ********** description ************
 * @name:      webView.exit
 * @authority: swanAPI
 * @path:      /exit
 * @args:      []
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.url", "method": "_naSwan.bridge.postMessage"}}}
 */
- (void)exit:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 动态设置当前页面的标题
 * 示  例: baiduboxapp://swanAPI/setNavigationBarTitle?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_setnavigationbartitle
 * 备  注:
 * ********** description ************
 * @name:      setNavigationBarTitle
 * @authority: swanAPI
 * @path:      /setNavigationBarTitle
 * @args:      [{"name": "title", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.interactionBridge.setNavigationBarTitle"}}}
 */
- (void)setNavigationBarTitle:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 在当前页面显示导航条加载动画
 * 示  例: baiduboxapp://swanAPI/showNavigationBarLoading?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_shownavigationbarloading
 * 备  注:
 * ********** description ************
 * @name:      showNavigationBarLoading
 * @authority: swanAPI
 * @path:      /showNavigationBarLoading
 * @args:      []
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.interactionBridge.showNavigationBarLoading"}}}
 */
- (void)showNavigationBarLoading:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 隐藏导航条加载动画
 * 示  例: baiduboxapp://swanAPI/hideNavigationBarLoading?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_hidenavigationbarloading
 * 备  注:
 * ********** description ************
 * @name:      hideNavigationBarLoading
 * @authority: swanAPI
 * @path:      /hideNavigationBarLoading
 * @args:      []
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.interactionBridge.hideNavigationBarLoading"}}}
 */
- (void)hideNavigationBarLoading:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 设置导航栏背景颜色
 * 示  例: baiduboxapp://swanAPI/setNavigationBarColor?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_setnavigationbarcolor
 * 备  注:
 * ********** description ************
 * @name:      setNavigationBarColor
 * @authority: swanAPI
 * @path:      /setNavigationBarColor
 * @args:      [{"name": "frontColor", "value": "string"}, {"name": "backgroundColor", "value": "string"}, {"name": "animation", "value": "object="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.interactionBridge.setNavigationBarColor"}}}
 */
- (void)setNavigationBarColor:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 获取菜单按钮(右上角胶囊按钮)的布局位置信息,坐标信息以屏幕左上角为原点。
 * 示  例: baiduboxapp://swanAPI/getMenuButtonBoundingClientRect?params={"cb":""}&callback=_bdbox_js_787&upgrade=0
 * 文  档: http://ft.baidu.com/#/scheme/swan_getmenubuttonboundingclientrect
 * 备  注:
 * ********** description ************
 * @name:      getMenuButtonBoundingClientRect
 * @authority: swanAPI
 * @path:      /getMenuButtonBoundingClientRect
 * @args:      []
 * @config:    {"swan": {"web": {"invoke": "swan.prompt"}, "webdegrade": {"invoke": "swan.prompt"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.getMenuButtonBoundingClientRect"}}}
 */
- (void)getMenuButtonBoundingClientRect:(BBASchemeDispatcher *)dispatcher;

#pragma mark - not API
+ (NSDictionary *)navigateToWithAppID:(NSString *)appID params:(NSDictionary *)params completion:(void (^)(NSDictionary *completionData))completion;
+ (NSDictionary *)redirectToWithAppID:(NSString *)appID params:(NSDictionary *)params completion:(void (^)(NSDictionary *completionData))completion;
+ (NSDictionary *)navigateBackWithAppID:(NSString *)appID params:(NSDictionary *)params;
+ (NSDictionary *)reLaunchWithAppID:(NSString *)appID params:(NSDictionary *)params completion:(void (^)(NSDictionary *completionData))completion;
+ (NSDictionary *)getMenuButtonBoundingClientRectWithAppID:(NSString *)appID;
+ (void)makeUbcLogForNavigatAction:(BOOL)success andAppID:(NSString *)appId;
+ (NSDictionary *)showModalPageWithAppID:(NSString *)appID
                                  params:(NSDictionary *)params
                              completion:(void (^)(NSDictionary *completionData))completion;
+ (NSDictionary *)hideModalPageWithAppID:(NSString *)appID
                                  params:(NSDictionary *)params
                              completion:(void (^)(NSDictionary *completionData))completion;

/**
 * @brief 设置导航栏标题
 * @param appID 小程序appId
 * @param params 端能力参数
 * @param action 端能力名称
 * @return 调用结果
 */
+ (NSDictionary *)setNavigationBarTitleWithAppID:(NSString *)appID
                                          params:(NSDictionary *)params
                                      actionName:(NSString *)action;

/**
 * @brief 设置导航栏背景颜色
 * @param appId 小程序appId
 * @param params 端能力参数
 * @param actionName 端能力名称
 * @return NSDictionary 端能力调用结果
 */
+ (NSDictionary *)setNavigationBarColorWithAppId:(NSString *)appId
                                          params:(NSDictionary *)params
                                      actionName:(NSString *)actionName;

/**
 * @brief 在当前页面显示导航条加载动画
 * @param appId 小程序appId
 * @param actionName 端能力名称
 * @return NSDictionary 返回调用结果
 */
+ (NSDictionary *)showNavigationBarLoadingWithAppId:(NSString *)appId
                                         actionName:(NSString *)actionName;

/**
 * @brief 在当前页面隐藏导航条加载动画
 * @param appId 小程序appId
 * @param actionName 端能力名称
 * @return NSDictionary 返回调用结果
 */
+ (NSDictionary *)hideNavigationBarLoadingWithAppId:(NSString *)appId
                                         actionName:(NSString *)actionName;

@end