BBASMAPPInfoModel.h
7.14 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
//
// BBASMAPPInfoModel.h
// SWAN
//
// Created by baidu on 2018/7/23.
// Copyright © 2018年 baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class BBASMRemoteDebuggerParams;
@class BBASMLocalDebuggerParams;
@class BBASchemeDispatcher;
NS_ASSUME_NONNULL_BEGIN
/// 小程序类型字符串BBASM_UNCONFUSED_STR_METHOD(@"c3dhbg==") //swan
#define BBASMC_AppTypeString BBASM_UNCONFUSED_STR_METHOD(@"c3dhbg==") //swan
/// 小游戏类型字符串BBASM_UNCONFUSED_STR_METHOD(@"c3dhbmdhbWU=") //swangame
#define BBASMC_GameTypeString BBASM_UNCONFUSED_STR_METHOD(@"c3dhbmdhbWU=") //swangame
/// 其他类型字符串@"unknown"
extern NSString * const kBBASMUnknownTypeString;
/// 小程序打点字段: 上一个小程序ID
extern NSString * const kBBASMStatisticsPreAppID;
/// 小程序打点字段: 当前小程序最初调起渠道来源
extern NSString * const kBBASMStatisticsPreSource;
/// 当前小程序的调起的来源小程序appkey
extern NSString *const BBASMAppInfoSrcAppKey;
/// 当前小程序的调起的来源小程序pkgType
extern NSString *const BBASMAppInfoSrcPkgType;
/// 根据scheme会默认初始化一个类型
typedef NS_ENUM(NSUInteger, BBASMAPPInfoType) {
BBASMAPPInfoTypeSMWorkBox, // 小程序
BBASMAPPInfoTypeGame, // 小游戏
BBASMAPPInfoTypeUnknown, // 未知
BBASMAPPInfoTypeWebGame, // wasm等直接通过webview加载的gm类型
};
typedef NS_ENUM(NSUInteger, BBASMShowByType) {
BBASMShowByTypeSys, // 除了用户和协议之外,目前 Android 在使用
BBASMShowByTypeUser, // 用户后台调起
BBASMShowByTypeSchema, // 由协议调起
};
// Debug小程序的AppID
UIKIT_EXTERN NSString * const DebugAppID;
@interface BBASMAPPInfoModel : NSObject
/// 小程序id,对应bundleid,业务请求(除pms)应该使用appkey
@property (nonatomic, copy, readonly) NSString *appID;
/// 打开小程序来源小程序id
@property (nonatomic, copy, readonly) NSString *sourceAppID;
/// 打开小程序来源小程序页面URL,含参数,navigateBackMiniProgram端能力使用
@property (nonatomic, copy, readonly) NSString *srcAppPage;
/// 打开小程序来源小程序页面pkgType,0-正式版、1-开发版、2-审核版、3-体验版
@property (nonatomic, strong, readonly) NSNumber *srcPkgType;
/// 打开小程序来源小程序页面appkey
@property (nonatomic, copy, readonly) NSString *srcAppKey;
/// 调起小程序时的参数,用于初始化特定页面
@property (nonatomic, copy, readonly) NSString *firstPageURL;
/// 配合百度统计,增加广告的clkid标识,可选字段
@property (nonatomic, copy, readonly) NSString *clickID;
/// 场景值
@property (nonatomic, copy, readonly) NSString *scene;
/// 打点用的ext, 注意与业务的`extraData`区分
@property (nonatomic, copy, readonly) NSDictionary *ext;
/// 小程序被调起和返回时传入的额外数据
@property (nonatomic, copy, readonly) NSDictionary *extraData;
/// 完整的调起协议
@property (nonatomic, copy, readonly) NSString *launchScheme;
/// 调起协议中的path,不带query
@property (nonatomic, copy, readonly) NSString *pathWithoutQuery;
/// 是否写入小程序打开历史,默认YES(写入历史)
@property (nonatomic, assign, readonly) BOOL isWriteHistory;
/// 值为:naviBack,返回;naviTo,打开一个小程序
@property (nonatomic, copy, readonly) NSString *naviAction;
/// 小程序启动时长流数据,用于透传
@property (nonatomic, strong) NSMutableDictionary *launchDataDic;
// 小程序和小游戏调起协议不同,增加参数区分
@property (nonatomic, assign) BBASMAPPInfoType appType;
/// 远程调试参数,启动remote-debug
@property (nonatomic, strong) BBASMRemoteDebuggerParams *debuggerParams;
/// 真机调试参数,启动local-debug
@property (nonatomic, strong) BBASMLocalDebuggerParams *localDebuggerParams;
/// 小程序打开的dispatcher,用于回调该小程序是否打开成功
@property (nonatomic, strong) BBASchemeDispatcher *dispatcher;
/// 区分是协议调起还是热启动,取值为 user | schema | sys
@property (nonatomic, assign) BBASMShowByType showByType;
///小程序错误页
@property (nonatomic, copy) NSString *backwardURL;
/// 小程序被调起传入baidusearch参数
@property (nonatomic, copy, readonly) NSDictionary *baidusearch;
///< 协议中透传的上一个l调起来源小程序的 appID
@property (nonatomic, copy, readonly) NSString *preAppId;
///< 协议中透传的小程序互调时的根来源
@property (nonatomic, copy, readonly) NSString *preSource;
/// 调起协议中的abtest参数
@property (nonatomic, copy) NSString *abTest;
/// 调起协议中的third_ext参数
@property (nonatomic, copy) NSString *thirdExt;
/// 每次单独调起的标识ID,用于串联打点
@property (nonatomic, copy) NSString *launchID;
/// web类game的url
@property (nonatomic, copy) NSString *webGameURL;
/// icon
@property (nonatomic, copy) NSString *appIcon;
/// 每次单独调起时间戳ms
@property (nonatomic, assign) NSTimeInterval startTimeStamp;
/// 调起协议中携带的开发者工具信息
@property (nonatomic, copy, readonly) NSDictionary *devToolInfo;
/// 调起协议中携带的带货信息
@property (nonatomic, copy, readonly) NSDictionary *rebateInfo;
/// 入口点击时的时间戳,调起起点
@property (nonatomic, assign) NSTimeInterval clickTimestamp;
/// 调起协议组件开始解析调起协议的起点
@property (nonatomic, strong) NSDate *dispatcherStartParseDate;
/// 调起协议中的nid参数
@property (nonatomic, copy, nullable) NSString *nid;
/// 是否允许非点击行为直接调起订阅消息面板(通过调起协议中参数设置,成功调用一次requestSubscribeFormId后会置为NO)
@property (nonatomic, assign) BOOL subscribeWithoutClick;
- (instancetype)initAppInfo:(NSDictionary *)appInfo;
/**
* @brief 返回AppType的string
*
* @return 小程序返回swan,小游戏返回swangame,其他返回unknown
*/
- (NSString *)getAppTypeString;
/**
* @brief 根据类型返回 ShowByTypeTypeString
*
* @return showByTypeTypeString
*/
- (NSString *)getAppShowByTypeTypeString;
/**
* @brief 对FirstPagePath 进行重新定向,指向一个合法的 path
*
* @param redirectPath 要指向的页面
*/
- (void)redirectIndependentFirstPagePath:(NSString *)redirectPath;
/**
* @breif 对 FirstPagePath ExtraData 清空(打开app时使用app.json 中默认first page)
*/
- (void)cleanupFirstPagePathAndExtraData;
/**
* @breif 清除带货分佣信息
*/
- (void)cleanupRebateInfo;
/// debug模式下,小程序包的下载地址
@property (nonatomic, copy, readonly) NSString *appDownloadURL;
/// 更新launchID,如小程序重启时(谨慎使用,涉及打点全流程)
- (void)updateLaunchID;
/// 将数据模型转化为字典
- (NSDictionary *)toDictionary;
/// @brief 更新appInfo属性
/// 之所以增加该方法,是因为挂在 App 上的 appInfo 会多线程访问
/// 直接将 app.appInfo 重新赋值会有多线程访问 crash;
/// 所以在更新 app.appinfo 时,使用此方法,更新内部属性即可
/// @param appInfoModel app info
- (void)updateWithInfoModel:(nonnull BBASMAPPInfoModel *)appInfoModel;
@end
NS_ASSUME_NONNULL_END