BBASMPMSCommon.h 9.58 KB
//
//  BBASMPMSCommon.h
//  SWAN
//
//  Created by baidu on 2018/11/2.
//  Copyright © 2018 baidu. All rights reserved.
//

#ifndef BBASMPMSCommon_h
#define BBASMPMSCommon_h

NS_ASSUME_NONNULL_BEGIN

#pragma mark - PMS api url path
static NSString * const kBBASMPMSAppPackageURLPath = @"pms/getpkg";
static NSString * const kBBASMPMSCorePackageURLPath = @"pms/updatecore";
static NSString * const kBBASMPMSAppPackageListURLPath = @"pms/fetchpkglist";
static NSString * const kBBASMPMSPluginURLPath = @"pms/getplugin";
static NSString * const BBASMPMSGetOpenbundleidURLPath = @"pms/getopenbundleid";
static NSString * const kBBASMPMSAppDepPackageListURLPath = @"pms/getdeplist";

#pragma mark - PMS api request parameter and response field

static NSString * const kBBASMPMSKeyPackageID = @"bundle_id";
static NSString * const kBBASMPMSKeyPackageVersion = @"pkg_ver";
static NSString * const kBBASMPMSKeyVersionCode = @"version_code";
static NSString * const kBBASMPMSKeyVersionName = @"version_name";
static NSString * const kBBASMPMSKeyAppState = @"pkg_type";
static NSString * const kBBASMPMSKeyCategory = @"category";
static NSString * const kBBASMPMSKeyFrameworkVersion = @"framework_ver";
static NSString * const kBBASMPMSKeyExtensionVersion = @"extension_ver";
static NSString * const kBBASMPMSKeyPluginVersion = @"plugin_ver";
static NSString * const kBBASMPMSKeyPluginVerCode = @"plugin_vercode";
static NSString * const kBBASMPMSKeyDownloadType = @"from";
static NSString * const kBBASMPMSKeyList = @"list";
static NSString * const kBBASMPMSKeyPagePath = @"path";
static NSString * const kBBASMPMSKeySubPackageID = @"sub_id";
static NSString * const kBBASMPMSKeySize = @"size";
static NSString * const kBBASMPMSKeyMD5 = @"md5";
static NSString * const kBBASMPMSKeyPackageSignature = @"sign";
static NSString * const kBBASMPMSKeyAppSignature = @"app_sign";
static NSString * const kBBASMPMSKeyDownloadUrl = @"download_url";
static NSString * const kBBASMPMSKeyIndependent = @"independent";
static NSString * const kBBASMPMSKeySubPath = @"sub_path";
static NSString * const kBBASMPMSKeyMaxAge = @"max_age";
static NSString * const kBBASMPMSKeyRetry = @"retry";
static NSString * const kBBASMPMSKeyExt = @"ext";
static NSString * const kBBASMPMSKeyDep = @"dep";

/// xcx调起时生成的唯一标识
static NSString *const BBASMPMSKeyLaunchID = @"launchid";
// 期望版本号,指定版本号进行下发
static NSString * const kBBASMPMSKeyExpectPackageVersion = @"expect_pkg_ver";
// appkey
static NSString *const BBASMPMSAppKey = @"appkey";

#define kBBASMPMSKeySMCoreVersion BBASM_JOIN_STR_METHOD(BBASM_LOWERCASE_STR, @"_core", @"_ver") //@"swan_core_ver"
#define kBBASMPMSKeySMGameVersion BBASM_JOIN_STR_METHOD(BBASM_LOWERCASE_STR, @"_game", @"_ver") //@"swan_game_ver"
#define kBBASMPMSKeySMExtensionVersion BBASM_JOIN_STR_METHOD(BBASM_LOWERCASE_STR, @"_ext", @"_ver") //@"swan_ext_ver"
// 小程序框架包版本号 @"swan_vercode"
#define kBBASMPMSKeySMCoreVerCode BBASM_JOIN_STR_METHOD(BBASM_LOWERCASE_STR, @"_vercode", @"")
// 宿主扩展包版本 @"swan_ext_vercode"
#define kBBASMPMSKeySMExtVerCode BBASM_JOIN_STR_METHOD(BBASM_LOWERCASE_STR, @"_ext", @"_vercode")

static NSString * const kBBASMPMSKeyGameExtensionVersion = @"game_ext_ver";
// 小游戏框架包版本号
static NSString *const  kBBASMPMSKeyGameVerCode = @"game_vercode";
// 游戏扩展包版本
static NSString *const  kBBASMPMSKeyGameExtVerCode = @"game_ext_vercode";
static NSString * const kBBASMPMSKeyFrameworks = @"framework";
static NSString * const kBBASMPMSKeyExtensions = @"extension";


#pragma mark - PMS Enumeration

/// PMS package download type.
typedef NS_ENUM(NSInteger, BBASMPMSAppDownloadType) {
    BBASMPMSAppDownloadTypePreDownload   = 1,    ///< Get app package in a pre-download way.
    BBASMPMSAppDownloadTypeSilentUpdate  = 2,    ///< Update app on background when the app is not running.
    BBASMPMSAppDownloadTypeSyncDownload  = 3,    ///< Synchronously force update app.
    BBASMPMSAppDownloadTypeAsyncUpdate   = 4,    ///< Update app on background when the app is running.
};

/// PMS App package state.
typedef NS_ENUM(NSUInteger, BBASMPMSAppState) {
    BBASMPMSAppStateReleased = 0,      ///< 默认类型    @"default" 正式版本
    BBASMPMSAppStateDeveloping = 1,    ///< 开发版类型  @"dev"
    BBASMPMSAppStateInReview = 2,      ///< 审核版类型  @"trial"
    BBASMPMSAppStateExperience = 3     ///< 体验版类型  @"experience"
};

/// PMS package type, it could be app main package, sub package, swan core, game core or swan extension.
typedef NS_ENUM(NSInteger, BBASMPMSPackageType) {
    BBASMPMSPackageTypeUnknow = -1,    ///< Package unknow.
    BBASMPMSPackageTypeAppMain = 0,    ///< App main package.
    BBASMPMSPackageTypeAppSub,         ///< App sub page package.
    BBASMPMSPackageTypeFramework,      ///< Means swan core or game core.
    BBASMPMSPackageTypeExtension,      ///< Swan extension
    BBASMPMSPackageTypePlugin          ///< Plugin or Dynamic Library etc. Some little package download with `getplugin` API.
};

typedef NS_OPTIONS(NSInteger, BBASMPMSTaskCase) {
    BBASMPMSTaskCaseNone = 0,
    BBASMPMSTaskCaseMain = 1 << 0,
    BBASMPMSTaskCaseSub = 1 << 1,
    BBASMPMSTaskCaseFramework = 1 << 2,
    BBASMPMSTaskCaseExtension = 1 << 3
};

/// App type. Swan app, game app or plugin.
typedef NS_ENUM(NSInteger, BBASMPMSCategory) {
    BBASMPMSCategoryNotSet = -1,
    BBASMPMSCategoryApp = 0,
    BBASMPMSCategoryGame = 1,
    BBASMPMSCategoryDebugPlugin = 2,
    BBASMPMSCategoryDynamicLibrary = 3,      /// 动态库
    BBASMPMSCategoryMapCustomStyle = 4,      /// 地图个性化
    BBASMPMSCategoryDependenceStyle = 6      /// 扩展包
};


#pragma mark - PMS call back block

@class BBASMPMSPackage;
@class BBASMAppMetaInfo;

/**
 * PMS app info block.
 *
 * @param appInfo   App info model.
 * @param taskCases Represent how many packages need to download.
 * @param error     Error info if exist.
 */
typedef void (^PMSAppInfoBlock)(BBASMAppMetaInfo * _Nullable appInfo,
                                BBASMPMSTaskCase taskCases,
                                NSError * _Nullable error);

/**
 * PMS app info block.
 *
 * @param appInfoList App info model list.
 */
typedef void (^PMSAppInfoListBlock)(NSArray<BBASMAppMetaInfo *> * _Nonnull appInfoList);

/**
 * PMS package request call back.
 *
 * @param package The PMS package.
 * @param error   Error info if exist.
 *
 * @discussion Even if the `error` has a value, the `package` still maybe NOT nil.
 *             Check `error` to judge success or failure for the call back of this time.
 */
typedef void (^PMSPackageDownloadBlock)(BBASMPMSPackage * _Nullable package,
                                        NSError * _Nullable error);

/**
 * PMS completion common callback. Used for get package, update core, get plugin.
 *
 * @param isSuccess Task completion result.
 * @param error Task failed detail error if exist.
 */
typedef void (^PMSCompletionBlock)(BOOL isSuccess,
                                   NSError * _Nullable error);

/**
 * PMS fetch app list api download callback.
 *
 * @param mainPakcage main package.
 * @param subPackages sub packages belong to the mainPackage.
 * @param error Error info if exist.
 */
typedef void (^PMSAppListDownloadBlock)(BBASMPMSPackage * _Nullable mainPakcage,
                                        NSArray<BBASMPMSPackage *> * _Nullable subPackages,
                                        NSError * _Nullable error);

/**
 * PMS fetch app list api completion callback.
 *
 * @param errorDic A dictionary contains error info which key is `bundle_id`, value is a NSError instance.
 */
typedef void (^PMSAppListCompletionBlock)(NSDictionary<NSString *, NSError *> * _Nullable errorDic);

/**
 * PMS fetch app remote update api completion callback.
 *
 * @param noUpdateAppIDs A array contains appIDs which have no update.
 */
typedef void (^PMSFetchUpdateCompletionBlock)(NSArray<NSString *> * _Nullable noUpdateAppIDs);

/**
 * PMS download progress call back.
 *
 * @param downloadedBytes The downloaded bytes of the package.
 * @param totalBytes The total bytes of the package.
 */
typedef void(^PMSDownloaderProgressBlock)(int64_t downloadedBytes, int64_t totalBytes);


/**
 * PMS package downloader download completed call back.
 *
 * @param type       The package type.
 * @param zipPath    Downloaded and zipFile path.
 * @param error      Error info if exist.
 *
 * @discussion Check `error` to judge success or failure for the call back
 */
typedef void (^PMSDownloaderDownloadCompletion)(BBASMPMSPackageType type,
                                                NSString * _Nullable zipPath,
                                                NSError * _Nullable error);

/**
 * PMS package downloader unzip completed call back.
 *
 * @param type       The package type.
 * @param error      Error info if exist.
 *
 * @discussion Check `error` to judge success or failure for the call back
 */
typedef void (^ _Nullable PMSDownloaderUnzipCompletion)(BBASMPMSPackageType type,
                                                        NSString * _Nullable packagePath,
                                                        NSError * _Nullable error);

/// PMS fetch dependencies list api download callback
/// @param package dependence package
/// @param error error info
typedef void (^PMSDependenciesDownloadBlock)(NSArray<BBASMPMSPackage *> * _Nullable package,
                                             NSError * _Nullable error);

/// PMS fetch dependencies list api completion callback
/// @param errorDic dependencies error info dic
typedef void (^PMSDependenciesCompletionBlock)(NSDictionary<NSString *, NSError *> * _Nullable errorDic);

#endif /* BBASMPMSCommon_h */
NS_ASSUME_NONNULL_END