BBASMServiceProtocol.h 12.8 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444
//
//  BBASMServiceProtocol.h
//  SWAN
//
//  Created by baidu on 2018/3/23.
//  Copyright © 2018年 baidu. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Pyramid/Pyramid.h>
#import "BBASMDefine.h"
#import <BBASchemeDispatcher/BBASchemeDispatcher.h>
#import "BBASMRenderViewProtocol.h"

NS_ASSUME_NONNULL_BEGIN

typedef void(^JobSucceccCallBack)(id job);

AliasService(BBASMServiceProtocol, bba_MNP)

extern NSString * const BBASMAppXPDataChangeNotification;

@protocol BBASMServiceProtocol <NSObject>

/// 根据appId删除小程序硬盘缓存
+ (void)removeLocalServiceForAppId:(NSString *)appId scene:(BBASMAppCleanScene)cleanScene;

/**
 * @brief 删除所有历史小程序/游戏的本地资源
 *
 */
+ (void)removeAllLocalServicesInHistory;

/// 删除全部小程序硬盘缓存并保留历史记录,用于个人中心清理缓存功能
+ (void)removeAllLocalServicesRemainHistory;
/// 获取小程序沙箱缓存所占空间大小
+ (long long)calculateCachesSize;
/// 获取当前小程序的场景值
+ (NSString*)getSceneValue;
/// 获取当前小程序的搜索参数
+ (NSDictionary *)getBaidusearchObject;
/// 获取当前小程序的app id
+ (NSString*)currentBBASMAppId;
/// 获取当前小程序的app icon
+ (NSString *)getAppIconPath;
/// 获取当前小程序的app 框架版本号
+ (NSString *)getAppCoreVersion:(NSString *)appID;
/// 当前小程序是否是小游戏
+ (BOOL)currentAppIsGame:(NSString *)appID;

/// 添加信息日志--非页面切换
+ (void)addInfoLog:(NSString *)content
            module:(NSString *)module
            action:(NSString *)action;
/// 重置授权
+ (void)resetServiceAuthorizeRecordWithIDs:(NSArray *)appIDs;
/// 清除本地缓存的授权信息
+ (void)removeLocalAuthorizeInfoWithAppID:(NSString *)appID;

/// 删除缓存时删除授权所有数据
+ (void)removeAllAuthorizeInfo;

/// 获取小程序当前运行的上下文
+ (NSString *)getSMContext;

/// 获取小程序crash参数
+ (NSString *)getCrashParams;

/// 获取当前小程序页面url
+ (NSString *)getCurrentSlaveWebViewUrl;

/// 发送调起支付的UBC打点信息
+ (void)sendWalletUBCMessage:(NSDictionary *)dictionary
                       appId:(NSString *)appId;

/// 是小程序的scheme
+ (BOOL)isLaunchMNP:(NSString *)scheme;

/// 是否为小.程.序的调起协议
/// @param scheme scheme
+ (BOOL)isMNPLaunchScheme:(NSString *)scheme;

/// 预加载swancore接口
+ (void)preloadSMCore:(BBASMCorePreloadScene)scene;

/// 清除所有预加载环境
+ (void)clearAllPreload;

/// 小程序功能是否可用 支持最低版本的系统为iOS9
+ (BOOL)enableMNP;

/**
 * @brief 是否只在wifi下预下载feed小程序
 *
 * @return YES,只wifi
 */
+ (BOOL)enablePreloadFromFeedOnlyWifi;

/**
 * @brief 根据appId返回app类型的string
 *
 * @return 小程序返回swan,小游戏返回swangame,其他返回unknown
 */
+ (NSString *)appTypeString:(NSString *)appId;

// 尝试静默更新
+ (void)trySilentUpdateWithScene:(BBASMAppPreDownloadScene)scene;

// 预处理-预取或预下载
+ (void)preprocessSMWithAppID:(NSString *)appID
                appTypeString:(NSString *)appTypeString
                       params:(NSDictionary *)paramDic
                        scene:(BBASMAppPreDownloadScene)scene
                     callBack:(nullable void(^)(BOOL succeed))callBack;

// 预下载小程序业务包
+ (void)preDownloadAppPackageWithAppIDs:(NSArray *)appIDs
                          appTypeString:(NSString *)appTypeString
                                  scene:(BBASMAppPreDownloadScene)scene
                               callBack:(nullable void(^)(BOOL succeed))callBack;

// 根据小.程.序调起scheme预下载小.程.序业务包
/// @param schemes 小.程.序调起协议
/// @param appTypeString app类型
/// @param scene 场景
/// @param callBack callback
+ (void)preDownloadAppPackageWithSchemes:(NSArray *)schemes
                           appTypeString:(NSString *)appTypeString
                                   scene:(BBASMAppPreDownloadScene)scene
                                callBack:(nullable void(^)(BOOL succeed))callBack;

// 根据scheme预下载小程序业务包 - splash使用
+ (void)preDownloadAppPackageWithScheme:(NSString *)scheme
                               callBack:(void(^)(BOOL succeed))callBack;

/// 取消预下载小程序包
+ (void)cancelPreDownloadAppPackageWithAppID:(NSString *)appID;
/// 小程序是否已经下载了
+ (BOOL)appHasPrefetchedWithAppID:(NSString *)appID;

/// 当前小程序/小游戏最顶层的VC
+ (UIViewController *)topViewController;


/**
 * @brief 收藏我的小程序
 * @param appid 被收藏的小程序的appid
 * @return  是否执行成功
 */
+ (BOOL)addFavorWithAppid:(NSString *)appid;

/**
 * @brief 移除我的小程序
 * @param appid 被移除的小程序的appid
 * @return  是否执行成功
 */
+ (BOOL)deleteFavorWithAppid:(NSString *)appid;

/**
 * @brief 将小程序移动至最前面
 * @param appid 被移动的小程序的appid
 * @return  是否执行成功
 */
+ (BOOL)topFavorWithAppid:(NSString *)appid;

/**
 * @brief 更新小程序关注状态
 *
 * @param appID 小程序appID
 * @param isFavorite 小程序需要更新的状态
 * @return 更新小程序关注状态是否成功
*/
+ (BOOL)updateMNPFavoriteStatus:(NSString *)appID isFavorite:(BOOL)isFavorite;

/**
 * @brief 更新xcx是否是新增关注
 *
 * @param appID xcx appID
 * @param isNewFavor 需要更新的状态
 * @return 更新xcx关注状态是否成功
*/
+ (BOOL)updateFavorStatus:(NSString *)appID isNewFavor:(BOOL)isNewFavor;

/**
 * @brief 当前小程序是否已经被收藏
 * @param appid 小程序的appid
 * @return 是否已经被收藏
 */
+ (BOOL)isFavorWithAppid:(NSString *)appid;

/**
 * @brief 获取收藏小程序列表
 *
 * @param isNeedUpdate 是否需要异步拉取server端数据更新本地数据
 * @return 收藏小程序列表
 */
+ (NSArray *)getFavorListWithAsyncUpdate:(BOOL)isNeedUpdate;

/**
 * @brief 删除指定小程序历史
 * @param appid 待删除小程序的appid
 * @return  是否执行成功
 */
+ (BOOL)deleteHistoryWithAppid:(NSString *)appid;

/**
 * @brief 删除所有小程序历史
 *
 * @return  是否执行成功
 */
+ (BOOL)deleteAllHistory;

/**
 * @brief 获取小程序历史数据
 *
 * @return 历史数据列表
 */
+ (NSArray *)getHistoryList;

/**
 * @brief 获取小程序历史数据
 * @param isNeedUpdate 是否需要异步拉取server端数据更新本地数据
 * @return 历史数据列表
 */
+ (NSArray *)getHistoryListWithAsyncUpdate:(BOOL)isNeedUpdate;

/**
 * @brief 获取小程序历史数据
 * @param from 来源值
 * @return 历史数据列表
 */
+ (NSArray *)getHistoryListWithFromId:(NSString *)from;

/**
 * @brief 根据指定参数获取小程序/小游戏scheme
 * @param appId 小程序id
 * @param frameType 小程序类型
 * @param from 小程序来源
 * @return scheme
 */
+ (NSString *)generateMNPSchemeByAppid:(NSString *)appId
                             frameType:(NSString *)frameType
                                  from:(NSString *)from;

/// 到达率打点
+ (void)mnpEntranceStatistics:(NSString *)shemeUrl
                   sourceFrom:(NSString *)sourceFrom;

/**
 * @brief 当前 App apiQueue 增加 job
 *  请在调用本方法完成之后适时调用 removeJobFromCurrentAppApiQueueWithAppID:job: 方法
 * @param appID appID
 * @param jobName jobName
 * @param succeedCallback succeedCallback
 * @param errorCallback errorCallback
 */
+ (void)addJobToCurrentAppApiQueueWithAppID:(NSString*)appID
                                    jobName:(NSString*)jobName
                                    succeed:(JobSucceccCallBack)succeedCallback
                                      error:(dispatch_block_t)errorCallback;

/**
 * @brief 从当前 App apiQueue 移除 job
 *  配合 addJobToCurrentAppApiQueueWithAppID:jobName:succeed:error: 使用,有添加,就有remove
 * @param appID appID
 * @param job BBASMAPIJob
 */
+ (void)removeJobFromCurrentAppApiQueueWithAppID:(NSString *)appID
                                             job:(id)job;

/**
 给指定的小程序邦定一个object
 如果key已经绑定过 则更新
 
 @param context 上下文信息
 @param key context 的key
 @param appID appid
 */
+ (void)setAssociateObject:(id)context
                    forKey:(NSString *)key
                     appID:(NSString *)appID;

/**
 获取绑定的object
 
 @param key context 的key
 @param appID appid
 @return context
 */
+ (id)associateObjectForKey:(NSString *)key
                      appID:(NSString *)appID;

/**
 * @brief 根据appId判断当前时间游戏banner广告显示时机是否过早
 *
 * @return 是返回YES,否则返回NO
 */
+ (BOOL)isGameBannerShowEarly:(NSString *)appId;

/**
 尝试调起手百登录页面
 
 @param appId 小程序appId
 @param succeedCallback 登录或检测成功回调
 @param errorCallback 登录或检测失败回调
 */
+ (void)checkAndTryLoginUserAppId:(NSString *)appId
                          succeed:(void(^)(void))succeedCallback
                            error:(void(^)(void))errorCallback;

/**
 获取小程序框架版本号
 */
+ (NSString *)getBBASMNativeVersion;

/**
 * @brief 获取所有APS的小程序信息字典(以appId为键值)
 *
 * @return 字典(以appId为键值)
 */
+ (nullable NSDictionary *)fetchAllMNPConfig;

/**
 * @brief 获取所有的小程序PMS下载信息字典(以appId为键值)
 *
 * @return 字典(以appId为键值)
 */
+ (nullable NSDictionary *)fetchAllMNPPMSConfig;

/**
 * @brief 手动上传截图或者小程序 clone 包信息
 *
 * @param senece 场景值scene: white_screen/clone_swan
 * @param uploadData 加密过的
 * @param parameterDict 上传携带的参数信息
 */
+ (void)manualReportWithSence:(NSString *_Nullable)senece uploadData:(NSData *_Nonnull)uploadData parameterDict:(NSMutableDictionary *_Nonnull)parameterDict;

/**
 * @brief 关闭小程序数据库
 *
 * @return 是否关闭小程序数据库成功 YES,为成功
 */
+ (BOOL)closeDatabase;

/**
 * @brief 获取当前小程序的consoleLogs
 *
 * @return (NSArray<NSString *> *)当前小程序的consoleLogs
 */
+ (NSArray<NSString *> *_Nullable)currentConsoleLogs;

/// xcx是否加载失败
+ (BOOL)isSMAppLoadErrorWithAppID:(NSString *)appID;

/// 仅小程序加载失败,反馈入口
/// @param appID appID
+ (void)feedbackWhenSMAppLoadError:(NSString *)appID;

/// 登录来源上报接口
/// @param loginAlready 调用登录功能之前是否登录(调用登录功能之前,如果已经登录成功 则不打点)
/// @param scene 登录功能触发场景
/// @param status 登录状态(登录展示,登录功能完成)
/// @param invokeFrom 调用登录的来源(api/component/na)
/// @param appId 调用接口的xcx appId
+ (void)reportLoginInfoWithLoginAlready:(BOOL)loginAlready
                                  scene:(BBASMLoginScene)scene
                                 status:(BBASMLoginStatus)status
                             invokeFrom:(NSString *)invokeFrom
                                  appId:(NSString *)appId;

# pragma mark - UnionAccount

/**
 * @brief 宿主退出联盟登录
 */
+ (void)unionAccountLogOut;

/**
 * @brief 获取到联盟登录bduss
 * @return 登录成功的bduss
 */
+ (NSString *)getUnionBduss;

/// 账号是否登录
+ (BOOL)isLoggedIn;

/// 是否是游客登录
+ (BOOL)isGuest;

/// 调用登录接口
/// @param loginCompletionBlock 结果回调
+ (void)login:(void (^)(BOOL success))loginCompletionBlock;

/// 获取用户账号信息
+ (NSDictionary *)getUserInfo;

#pragma mark - LifeCycle Notification
/**
 * @brief   获取xcx即将进场展现的通知名称 (包括首次进场和从其它界面回退展现)
 * @return  notificationName
 */
+ (nonnull NSString *)appOnShowNotificationName;

/**
 * @brief 获取xcx退场展现的通知名称 (移出宿主导航栈)
 * @return  notificationName
 */
+ (nonnull NSString *)appOnHideNotificationName;

/**
 * @brief 获取xcx状态变更为非活跃状态的通知名称 (区别于退场,是被其它页面覆盖消失而触发的通知)
 * @return  notificationName
 */
+ (nonnull NSString *)appOnResignActiveNotificationName;

/**
 * @brief 从app队列里面清除BBASMApp
 *
 * @param appId appId
 */
+ (void)removeActiveItem:(NSString *)appId;

// 第一个页面渲染完成的通知
+ (NSString *)getFirstPageDidRenderByNANoticeName;

// 第一个页面FMP通知
+ (NSString *)getFirstScreenPaintDateByNANoticeName;

// 第一个页面FCP通知
+ (NSString *)getFirstPaintDateByNANoticeName;

+ (NSString *)getCorrectScreenPaintDateByNANoticeName;

// 第一个起播终点通知
+ (NSString *)getVideoPlaySuccessDateByNANoticeName;

/// @brief 派发topPages 事件(提前加载资源)
/// @param slaveWebview 派发事件的 webView
/// @param appID appID
+ (void)dispatchPreloadTopPagesResEvent:(NSObject<BBASMRenderViewProtocol> *)slaveWebview
                                  appID:(NSString *)appID;
@end
NS_ASSUME_NONNULL_END