单军华
2018-07-11 7b02207537d35bfa1714bf8beafc921f717d100a
screendisplay/Pods/MagicWindowSDK/MagicWindowSDK/MagicWindowSDK/MWApi.h
New file
@@ -0,0 +1,396 @@
//
//  MagicWindowApi.h
//  Created by 刘家飞 on 14/11/18.
//  Copyright (c) 2014年 MagicWindow. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "MWCampaignConfig.h"
#import <CoreLocation/CoreLocation.h>
#import "MWApiObject.h"
#define DEPRECATED(_version) __attribute__((deprecated))
/**
 *  当活动有更新的时候会触发该notification
 **/
#define MWUpdateCampaignNotification            @"MWUpdateCampaignNotification"
/**
 *  活动详情页面即将打开的时候会触发
 **/
#define MWWebViewWillAppearNotification         @"MWWebViewWillAppearNotification"
/**
 *  活动详情页面关闭的时候会触发
 **/
#define MWWebViewDidDisappearNotification       @"MWWebViewDidDisappearNotification"
/**
 *  @deprecated This method is deprecated starting in version 3.66
 *  @note Please use @code MWUpdateCampaignNotification @code instead.
 **/
#define MWRegisterAppSuccessedNotification      @"MWRegisterAppSuccessedNotification"  DEPRECATED(3.66)
typedef  void (^ _Nullable CallbackWithCampaignSuccess) (NSString *__nonnull key, UIView *__nonnull view, MWCampaignConfig *__nonnull campaignConfig);
typedef void (^ _Nullable CallbackWithCampaignFailure) (NSString *__nonnull key, UIView *__nonnull view, NSString *__nullable errorMessage);
typedef  BOOL (^ CallbackWithTapCampaign) (NSString *__nonnull key, UIView *__nonnull view);
typedef void(^ _Nullable CallBackMLink)(NSURL * __nonnull url ,NSDictionary * __nullable params);
typedef  NSDictionary * _Nullable (^ CallbackWithMLinkCampaign) (NSString *__nonnull key, UIView *__nonnull view);
typedef  NSDictionary * _Nullable (^ CallbackWithMLinkLandingPage) (NSString *__nonnull key, UIView *__nonnull view);
typedef  NSDictionary * _Nullable (^ CallbackWithReturnMLink) (NSString *__nonnull key, UIView *__nonnull view);
@interface MWApi : NSObject
/**
 *  注册app
 *  需要在 application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中调用
 *  @param appKey 魔窗后台注册的appkey
 *  @return void
 */
+ (void)registerApp:(nonnull NSString *)appKey;
/**
 *  设置用户基本信息
 *  @param userPhone 用户手机号
 *  @return void
 */
+ (void)setUserPhone:(nonnull NSString *)userPhone;
/**
 *  设置用户基本信息
 *  @param user MWUserProfile对象
 *  @return void
 */
+ (void)setUserProfile:(nonnull MWUserProfile *)user;
/**
 * 退出登录的时候,取消当前的用户基本信息
 */
+ (void)cancelUserProfile;
/**
 *  设置渠道,默认为appStore
 *  @param channel 渠道key
 *  @return void
 */
+ (void)setChannelId:(nonnull NSString *)channel;
/**
 *  设置是否打印sdk的log信息,默认不开启,在release情况下,不要忘记设为NO.
 *  @param enable YES:打开,NO:关闭
 *  @return void
 */
+ (void)setLogEnable:(BOOL)enable;
/**
 *  设置是否抓取crash信息,默认开启.
 *  @param enable YES:打开,NO:关闭
 *  @return void
 */
+ (void)setCaughtCrashesEnable:(BOOL)enable;
/**
 *  @deprecated This method is deprecated starting in version 3.9
 *  @note default true
 **/
+ (void)setMlinkEnable:(BOOL)enable DEPRECATED(3.9);
/**
 * 用来获得当前sdk的版本号
 * return 返回sdk版本号
 */
+ (nonnull NSString *)sdkVersion;
#pragma mark Campaign
/**
 *  获取UserAgent
 *  当使用自己的WebView打开活动的时候,需要修改UserAgent(新UserAgent=原UserAgent + SDK的UserAgent),用作数据监测和统计
 *  @param key 魔窗位key
 *  @return SDK的UserAgent
 */
+ (nullable NSString *)getUserAgentWithKey:(nonnull NSString *)key;
/**
 *  获取活动相关配置信息
 *  适用于pushViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTarget:(nonnull UIView *)view
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure;
/**
 *  获取活动相关配置信息
 *  适用于presentViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param controller 展示活动简介的UIViewController
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view withTargetViewController:(nonnull UIViewController *)controller
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure;
/**
 *  获取活动相关配置信息
 *  适用于所有的UIViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param controller 展示活动简介的UIViewController
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @param tap callback 当点击该魔窗位上活动的时候会调用这个回调,return YES 允许跳转,NO 不允许跳转
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view withTargetViewController:(nullable UIViewController *)controller
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure
                        tap:(nullable CallbackWithTapCampaign)tap;
/**
 *  获取活动相关配置信息
 *  适用于所有的UIViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param controller 展示活动简介的UIViewController
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @param tap callback 当点击该魔窗位上活动的时候会调用这个回调,return YES 允许跳转,NO 不允许跳转
 *  @param mLinkHandler callback 当活动类型为mlink的时候,点击的该活动的时候,会调用这个回调,return mlink需要的相关参数
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view withTargetViewController:(nullable UIViewController *)controller
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure
                        tap:(nullable CallbackWithTapCampaign)tap
               mLinkHandler:(nullable CallbackWithMLinkCampaign)mLinkHandler;
/**
 *  获取活动相关配置信息
 *  适用于所有的UIViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param controller 展示活动简介的UIViewController
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @param tap callback 当点击该魔窗位上活动的时候会调用这个回调,return YES 允许跳转,NO 不允许跳转
 *  @param mLinkHandler callback 当活动类型为mlink的时候,点击的该活动的时候,会调用这个回调,return mlink需要的相关参数
 *  @param mLinkLandingPageHandler callback 当活动类型为mlink landing page的时候,点击的该活动的时候,会调用这个回调,return mlink landing page需要的相关参数
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view withTargetViewController:(nullable UIViewController *)controller
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure
                        tap:(nullable CallbackWithTapCampaign)tap
               mLinkHandler:(nullable CallbackWithMLinkCampaign)mLinkHandler
    mLinkLandingPageHandler:(nullable CallbackWithMLinkLandingPage)landingPageHandler;
/**
 *  获取活动相关配置信息,支持A跳到B,B返回A,魔窗位即代表A
 *  适用于所有的UIViewController
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @param controller 展示活动简介的UIViewController
 *  @param callBackMLinkKey : mLink key ,当从B返回回来的时候,会根据mLink key来跳转到相应的页面
 *  @param success callback 当成功获取到该魔窗位上活动的时候会调用这个回调
 *  @param failure callback 当获取到该魔窗位上活动失败的时候会调用这个回调
 *  @param tap callback 当点击该魔窗位上活动的时候会调用这个回调,return YES 允许跳转,NO 不允许跳转
 *  @param mLinkHandler callback 当活动类型为mlink的时候,点击的该活动的时候,会调用这个回调,return mlink需要的相关参数
 *  @param mLinkLandingPageHandler callback 当活动类型为mlink landing page的时候,点击的该活动的时候,会调用这个回调,return mlink landing page需要的相关参数
 *  @param MLinkCallBackParamas :callback 当从B返回过来的时候,需要的相关参数
 *  @return void
 */
+ (void)configAdViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view withTargetViewController:(nullable UIViewController *)controller WithCallBackMLinkKey:(nullable NSString *)callBackMLinkKey
                    success:(CallbackWithCampaignSuccess)success
                    failure:(CallbackWithCampaignFailure)failure
                        tap:(nullable CallbackWithTapCampaign)tap
                      mLinkHandler:(nullable CallbackWithMLinkCampaign)mLinkHandler
                mLinkLandingPageHandler:(nullable CallbackWithMLinkLandingPage)landingPageHandler
       MLinkCallBackParamas:(nullable CallbackWithReturnMLink)mLinkCallBackParamas;
/**
 *  发送展现日志
 *  @param key 魔窗位key
 *  确定视图显示在window上之后再调用trackImpression,不要太早调用,在tableview或scrollview中使用时尤其要注意
 */
+ (void)trackImpressionWithKey:(nonnull NSString *)key;
/**
 *  判断单个魔窗位上是否有活动
 *  @param mwkey 魔窗位key
 *  @return yes:有处于活跃状态的活动;no:没有处于活跃状态的活动
 */
+(BOOL)isActiveOfmwKey:(nonnull NSString *)mwkey;
/**
 *  批量判断魔窗位上是否有活动
 *  @param mwKeys 魔窗位keys
 *  @return NSArray 有活动的魔窗位keys
 */
+(nullable NSArray *)mwkeysWithActiveCampign:(nonnull NSArray *)mwKeys;
/**
 *  自动打开webView,显示活动
 *  只有在成功获取到活动信息的时候,该方法才有效
 *  @param key 魔窗位key
 *  @param view 展示活动简介的view
 *  @return void
 */
+ (void)autoOpenWebViewWithKey:(nonnull NSString *)key withTargetView:(nonnull UIView *)view;
/**
 *  判断是否发送webview的相关通知(进入webView,关闭webView)
 *  只有在成功获取到活动信息的时候,该方法才有效
 *  @param enable YES:打开,NO:关闭。默认状态为NO
 *  @return void
 */
+ (void)setWebViewNotificationEnable:(BOOL)enable;
/**
 *  是否自定义活动详情页面的导航条按钮
 *  @param enable YES:自定义,NO:不自定义。默认状态为NO
 *  @return void
 */
+ (void)setWebViewBarEditEnable:(BOOL)enable;
#pragma mark Custom event
/**
 *  标识某个页面访问的开始,在合适的位置调用,name不能为空。
 *  @param name 页面的唯一标示,不能为空
 *  @return void
 */
+ (void)pageviewStartWithName:(nonnull NSString *)name;
/**
 *  标识某个页面访问的结束,与pageviewStartWithName配对使用,name不能为空。
 *  @param name 页面的唯一标示,不能为空
 *  @return void
 */
+ (void)pageviewEndWithName:(nonnull NSString *)name;
/**
 * 自定义事件
 *  @param eventId 自定义事件的唯一标示,不能为空
 *  @return void
 */
+ (void)setCustomEvent:(nonnull NSString *)eventId;
/**
 * 自定义事件
 *  @param eventId 自定义事件的唯一标示,不能为空
 *  @param attributes 动态参数,最多可包含9个
 *  @return void
 */
+ (void)setCustomEvent:(nonnull NSString *)eventId attributes:(nullable NSDictionary *)attributes;
#pragma mark Location
/**
 *  设置经纬度信息
 *  @param latitude 纬度
 *  @param longitude 经度
 *  @return void
 */
+ (void)setLatitude:(double)latitude longitude:(double)longitude;
/**
 *  设置经纬度信息
 *  @param location CLLocation 经纬度信息
 *  @return void
 */
+ (void)setLocation:(nonnull CLLocation *)location;
/**
 *  设置城市编码,以便获取相应城市的活动数据,目前仅支持到地级市
 *  国家标准的行政区划代码:http://files2.mca.gov.cn/www/201510/20151027164514222.htm
 *  @param code 城市编码
 *  @return void
 */
+ (void)setCityCode:(nonnull NSString *)code;
#pragma mark Share
/**
 *  处理第三方app通过URL启动App时传递的数据
 *  需要在 application:handleOpenURL中调用。
 *  @param url 启动App的URL
 *  @param delegate 用来接收第三方app触发的消息。
 *  @return 成功返回YES,失败返回NO。
 */
+ (BOOL)handleOpenURL:(nonnull NSURL *)url delegate:(nullable id)delegate;
/**
 *  @deprecated This method is deprecated starting in version 3.66
 *  @note Please use @code handleOpenURL:delegate: @code instead.
 **/
+ (BOOL)handleOpenURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nullable id)annotation delegate:(nullable id)delegate DEPRECATED(3.66);
#pragma mark mLink
/**
 * 获得最近一次的mLink短链接的渠道来源
 * @return stirng
 */
+ (nullable NSString *)getLastChannelForMLink;
/**
 * 注册一个mLink handler,当接收到URL的时候,会根据mLink key进行匹配,当匹配成功会调用相应的handler
 * 需要在 AppDelegate 的 didFinishLaunchingWithOptions 中调用
 * @param key 后台注册mlink时生成的mlink key
 * @param handler mlink的回调
 * @param params 动态参数
 * @return void
 */
+ (void)registerMLinkHandlerWithKey:(nonnull NSString *)key handler:(CallBackMLink)handler;
/**
 * 注册一个默认的mLink handler,当接收到URL,并且所有的mLink key都没有匹配成功,就会调用默认的mLink handler
 * 需要在 AppDelegate 的 didFinishLaunchingWithOptions 中调用
 * @param handler mlink的回调
 * @return void
 */
+ (void)registerMLinkDefaultHandler:(CallBackMLink)handler;
/**
 * 根据不同的URL路由到不同的app展示页
 * 需要在 application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 中调用
 * @param url 传入上面方法中的openUrl
 *  @return void
 */
+ (void)routeMLink:(nonnull NSURL *)url;
/**
 *  根据universal link路由到不同的app展示页
 *  需要在 application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler 中调用
 *  @param userActivity 传入上面方法中的userActivity
 *  @return BOOL
 */
+ (BOOL)continueUserActivity:(nonnull NSUserActivity *)userActivity;
/**
 *  A跳B,B判断是否需要返回A
 *  @return BOOL YES:需要返回,NO:不需要返回
 */
+ (BOOL)callbackEnable;
/**
 *  A跳B,B返回A的时候,调用此方法
 *  @param params 返回A时需要传入的参数
 *  @return BOOL YES:成功返回,NO:失败
 */
+ (BOOL)returnOriginAppWithParams:(nullable NSDictionary *)params;
/**
 *  获取无码邀请中传回来的相关值
 *  @param paramKey,比如:u_id
 *  @return id 返回相应的值
 */
+ (nullable id)getMLinkParam:(nonnull NSString *)paramKey;
@end