From 9688b04a25657b8b71a3be97e5021d40c6344406 Mon Sep 17 00:00:00 2001 From: liyuhua <15626451870@163.com> Date: Wed, 20 Mar 2024 19:55:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81=E5=8F=8A=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E9=A3=98=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 2 +- YuMi.xcodeproj/project.pbxproj | 12 ++ YuMi/Appdelegate/AppDelegate+ThirdConfig.m | 10 +- YuMi/Appdelegate/AppDelegate.m | 20 ++- YuMi/Config/ClientConfig.h | 2 + YuMi/CustomUI/ShareView/Model/XPShareItem.h | 2 + YuMi/CustomUI/ShareView/XPShareView.m | 8 +- .../View/LoginFullInfoViewController.m | 7 +- .../Modules/YMMessage/Model/AttachmentModel.h | 10 +- .../YMNewHome/View/XPNewHomeViewController.m | 2 +- .../Model/PIBaseAnimationViewModel.h | 1 + .../Model/PIUniversalBannerModel.h | 38 +++++ .../Model/PIUniversalBannerModel.m | 17 +++ .../AnimationView/PIUniversalBannerView.h | 28 ++++ .../AnimationView/PIUniversalBannerView.m | 142 ++++++++++++++++++ .../View/AnimationView/XPRoomAnimationView.m | 107 ++++++++++++- .../YMRoom/View/StageView/AnchorStageView.m | 11 +- .../View/PIFullScreenBannerAnimation.h | 1 + .../View/PIFullScreenBannerAnimation.m | 97 +++++++++++- .../YMTabbar/View/TabbarViewController.m | 3 + YuMi/Modules/YMWeb/XPWebViewController.m | 5 +- YuMi/Tools/YMLine/PILineManager.swift | 1 + YuMi/YuMi.entitlements | 4 + YuMi/YuMiRelease.entitlements | 4 + 24 files changed, 511 insertions(+), 23 deletions(-) create mode 100644 YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.h create mode 100644 YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.m create mode 100644 YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.h create mode 100644 YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.m diff --git a/Podfile b/Podfile index 62454bb2..fdfa9162 100644 --- a/Podfile +++ b/Podfile @@ -62,7 +62,7 @@ target 'YuMi' do pod 'SVGAPlayer' pod 'GoogleSignIn' - #pod 'mob_linksdk_pro' + pod 'mob_linksdk_pro' pod 'mob_sharesdk' pod 'mob_sharesdk/ShareSDKPlatforms/Apple' #pod 'mob_sharesdk/ShareSDKPlatforms/Line' diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index b2b50967..53ca1811 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -236,6 +236,8 @@ 237B94BE2A984DA7007853E3 /* XPRoomTrumpetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 237B94B72A984DA7007853E3 /* XPRoomTrumpetViewController.m */; }; 237B94BF2A984DA7007853E3 /* XPRoomTrumpetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 237B94B82A984DA7007853E3 /* XPRoomTrumpetView.m */; }; 237B94C02A984DA7007853E3 /* Api+RoomTrumpet.m in Sources */ = {isa = PBXBuildFile; fileRef = 237B94BA2A984DA7007853E3 /* Api+RoomTrumpet.m */; }; + 238A90072BA9729200828123 /* PIUniversalBannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 238A90062BA9729200828123 /* PIUniversalBannerView.m */; }; + 238A900A2BA9756600828123 /* PIUniversalBannerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 238A90092BA9756600828123 /* PIUniversalBannerModel.m */; }; 238B37A32AC55A2C00BFC9D5 /* XPTreasureFailyPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 238B37242AC55A2C00BFC9D5 /* XPTreasureFailyPresenter.m */; }; 238B37A42AC55A2C00BFC9D5 /* TreasureFairyLimitModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 238B372B2AC55A2C00BFC9D5 /* TreasureFairyLimitModel.m */; }; 238B37A52AC55A2C00BFC9D5 /* TreasureFailyKeyInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 238B372C2AC55A2C00BFC9D5 /* TreasureFailyKeyInfoModel.m */; }; @@ -1941,6 +1943,10 @@ 237B94B82A984DA7007853E3 /* XPRoomTrumpetView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPRoomTrumpetView.m; sourceTree = ""; }; 237B94BA2A984DA7007853E3 /* Api+RoomTrumpet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Api+RoomTrumpet.m"; sourceTree = ""; }; 237B94BB2A984DA7007853E3 /* Api+RoomTrumpet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Api+RoomTrumpet.h"; sourceTree = ""; }; + 238A90052BA9729200828123 /* PIUniversalBannerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PIUniversalBannerView.h; sourceTree = ""; }; + 238A90062BA9729200828123 /* PIUniversalBannerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PIUniversalBannerView.m; sourceTree = ""; }; + 238A90082BA9756600828123 /* PIUniversalBannerModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PIUniversalBannerModel.h; sourceTree = ""; }; + 238A90092BA9756600828123 /* PIUniversalBannerModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PIUniversalBannerModel.m; sourceTree = ""; }; 238B37242AC55A2C00BFC9D5 /* XPTreasureFailyPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPTreasureFailyPresenter.m; sourceTree = ""; }; 238B37252AC55A2C00BFC9D5 /* XPTreasureFailyPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPTreasureFailyPresenter.h; sourceTree = ""; }; 238B37272AC55A2C00BFC9D5 /* XPTreasureFailyProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPTreasureFailyProtocol.h; sourceTree = ""; }; @@ -7523,6 +7529,8 @@ F1D8556E2931FC86008C418F /* XPRoomYearActivityView.m */, E80E09B12A42071C00CD2BE7 /* XPRoomStarKitchenBannerView.h */, E80E09B22A42071D00CD2BE7 /* XPRoomStarKitchenBannerView.m */, + 238A90052BA9729200828123 /* PIUniversalBannerView.h */, + 238A90062BA9729200828123 /* PIUniversalBannerView.m */, ); path = AnimationView; sourceTree = ""; @@ -7676,6 +7684,8 @@ E80E09B52A42078F00CD2BE7 /* XPRoomStarKitchenModel.m */, 23BA16592A5D2ACF0030C5A3 /* PIBaseAnimationViewModel.h */, 23BA165A2A5D2ACF0030C5A3 /* PIBaseAnimationViewModel.m */, + 238A90082BA9756600828123 /* PIUniversalBannerModel.h */, + 238A90092BA9756600828123 /* PIUniversalBannerModel.m */, ); path = Model; sourceTree = ""; @@ -10823,6 +10833,7 @@ E839532D276A030F00CF2F24 /* XPMineDressUpListViewController.m in Sources */, E821077B2987D4AB00DE7040 /* MessageFindNewGreetModel.m in Sources */, E85E7BA32A4EC99300B6D00A /* XPMineGiveDiamondDetailsVC.m in Sources */, + 238A90072BA9729200828123 /* PIUniversalBannerView.m in Sources */, E8B846D826FDE17300A777FE /* XPMineRechargeProtocol.h in Sources */, E88C72A6282921D60047FB2B /* XPRoomBackMusicPlayerView.m in Sources */, E84CBCE72843807500D43221 /* XPMineFriendPresenter.m in Sources */, @@ -11020,6 +11031,7 @@ 23194DCD2AD14BF000649F51 /* DDASLLogger.m in Sources */, E85E7B492A4EB0D300B6D00A /* XPMineGuildSearchViewController.m in Sources */, 9B86D88328192DC000494FCD /* XPRoomRankEntranceView.m in Sources */, + 238A900A2BA9756600828123 /* PIUniversalBannerModel.m in Sources */, E85E7B012A4EB0D200B6D00A /* XPSuperAdminSetPresenter.m in Sources */, 18F404B7276095D700A6C548 /* SessionChatLimitView.m in Sources */, E8788942273A55AD00BF1D57 /* XPGiftUsersView.m in Sources */, diff --git a/YuMi/Appdelegate/AppDelegate+ThirdConfig.m b/YuMi/Appdelegate/AppDelegate+ThirdConfig.m index 22341f38..18df890d 100644 --- a/YuMi/Appdelegate/AppDelegate+ThirdConfig.m +++ b/YuMi/Appdelegate/AppDelegate+ThirdConfig.m @@ -11,7 +11,7 @@ #import #import #import - +#import ///Tool #import "YUMIConstant.h" #import "CustomAttachmentDecoder.h" @@ -145,6 +145,14 @@ UIKIT_EXTERN NSString * adImageName; // [platformsRegister setupFacebookWithAppkey:@"1266232494209868" appSecret:@"c9b170b383f8be9cdf118823b8632821" displayName:YMLocalizedString(@"AppDelegate_ThirdConfig0")]; [platformsRegister setupLineAuthType:SSDKAuthorizeTypeBoth]; }]; + NSString *isUpload = [[NSUserDefaults standardUserDefaults]valueForKey:@"kMobLinkUploadPrivacy"]; + if (isUpload == nil){ + [MobSDK uploadPrivacyPermissionStatus:YES onResult:^(BOOL success) { + + }]; + [[NSUserDefaults standardUserDefaults] setValue:@"YES" forKey:@"kMobLinkUploadPrivacy"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } } #pragma mark - 表情 diff --git a/YuMi/Appdelegate/AppDelegate.m b/YuMi/Appdelegate/AppDelegate.m index aaec8387..d6d3e76b 100644 --- a/YuMi/Appdelegate/AppDelegate.m +++ b/YuMi/Appdelegate/AppDelegate.m @@ -5,6 +5,8 @@ // Created by admin on 2023/3/9. // +#import +#import #import "AppDelegate.h" #import "TabbarViewController.h" #import "BaseNavigationController.h" @@ -25,7 +27,7 @@ @import Firebase; UIKIT_EXTERN NSString * const kOpenRoomNotification; -@interface AppDelegate () +@interface AppDelegate () @end @@ -60,12 +62,19 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; } [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; [FIRApp configure]; - + [MobLink setDelegate:self]; + return YES; } +- (void) IMLSDKWillRestoreScene:(MLSDKScene *)scene Restore:(void (^)(BOOL, RestoreStyle))restoreHandler +{ + + restoreHandler(YES, MLDefault); + +} @@ -171,11 +180,8 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; }else if (type == 8){ NSString *inviteCode = paramsDict[@"inviteCode"]; if (inviteCode != nil && [[AccountInfoStorage instance]getUid].length == 0){ - LoginFullInfoViewController *fullVC = [LoginFullInfoViewController new]; - BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:fullVC]; - fullVC.inviteCode = inviteCode; - nav.modalPresentationStyle = UIModalPresentationFullScreen; - kWindow.rootViewController = nav; + ClientConfig *config = [ClientConfig shareConfig]; + config.inviteCode = inviteCode; } } return YES; diff --git a/YuMi/Config/ClientConfig.h b/YuMi/Config/ClientConfig.h index abd1ab00..a3f50797 100644 --- a/YuMi/Config/ClientConfig.h +++ b/YuMi/Config/ClientConfig.h @@ -31,6 +31,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy) NSString *__nullable chatId; ///用户id,推送跳转到聊天页面 @property (nonatomic, copy) NSString *__nullable pushChatId; +///邀请码,从外面进来会进入注册页面,并自动填写这个邀请码 +@property(nonatomic,copy) NSString *inviteCode; ///表情--- @property (nonatomic, copy) NSString *version; @property (nonatomic, copy) NSString *zipMd5; diff --git a/YuMi/CustomUI/ShareView/Model/XPShareItem.h b/YuMi/CustomUI/ShareView/Model/XPShareItem.h index 0bda55b9..211d661e 100644 --- a/YuMi/CustomUI/ShareView/Model/XPShareItem.h +++ b/YuMi/CustomUI/ShareView/Model/XPShareItem.h @@ -31,6 +31,8 @@ typedef enum : NSUInteger { } XPShareItemTag; @interface XPShareItem : NSObject +@property(nonatomic,assign) BOOL isShareInvite; +@property (nonatomic, copy) NSString *inviteTitle; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *imageName; @property (nonatomic, copy) NSString *disableImageName; diff --git a/YuMi/CustomUI/ShareView/XPShareView.m b/YuMi/CustomUI/ShareView/XPShareView.m index 1f13b06c..15fbfb27 100644 --- a/YuMi/CustomUI/ShareView/XPShareView.m +++ b/YuMi/CustomUI/ShareView/XPShareView.m @@ -184,6 +184,9 @@ return; } NSString*contentKey= [encodedUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet]; + if(item.isShareInvite){ + contentKey = [NSString stringWithFormat:@"%@[%@]",item.inviteTitle,encodedUrl]; + } NSString*contentType =@"text"; NSString*urlString = [NSString stringWithFormat:@"line://msg/%@/%@",contentType, contentKey]; @@ -202,11 +205,6 @@ urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]; linkContent.contentURL= [NSURL URLWithString:urlString]; linkContent.quote = content; - - FBSDKSharePhoto *p = [[FBSDKSharePhoto alloc]initWithImageURL:nil isUserGenerated:NO]; - - - FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc]initWithViewController:[XCCurrentVCStackManager shareManager].getCurrentVC content:linkContent delegate:self]; // 需要指定模式,否则会调起web分享 shareDialog.mode = FBSDKShareDialogModeNative; diff --git a/YuMi/Modules/YMLogin/View/LoginFullInfoViewController.m b/YuMi/Modules/YMLogin/View/LoginFullInfoViewController.m index c4763a7f..5616ccd7 100644 --- a/YuMi/Modules/YMLogin/View/LoginFullInfoViewController.m +++ b/YuMi/Modules/YMLogin/View/LoginFullInfoViewController.m @@ -24,7 +24,7 @@ #import "LoginFullInfoPresenter.h" #import "LoginFullInfoProtocol.h" #import "PILoginManager.h" - +#import "ClientConfig.h" @interface LoginFullInfoViewController () @@ -81,6 +81,11 @@ [self initSubViews]; [self initSubViewConstraints]; [self initEvents]; + ClientConfig *config = [ClientConfig shareConfig]; + if (config.inviteCode.length > 0){ + self.inviteCode = config.inviteCode; + config.inviteCode = @""; + } } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { diff --git a/YuMi/Modules/YMMessage/Model/AttachmentModel.h b/YuMi/Modules/YMMessage/Model/AttachmentModel.h index fcb25fb7..8e2e9e92 100644 --- a/YuMi/Modules/YMMessage/Model/AttachmentModel.h +++ b/YuMi/Modules/YMMessage/Model/AttachmentModel.h @@ -115,6 +115,8 @@ typedef NS_ENUM(NSUInteger, CustomMessageType) { CustomMessageType_General_Public_Screen = 103, ///疯狂动物园飘屏 CustomMessageType_Graffiti_Star_Kitchen = 104, + ///通用飘屏 + CustomMessageType_General_Floating_Screen = 105, }; @@ -633,7 +635,13 @@ typedef NS_ENUM(NSUInteger, CustomMessageTypeGeneralPublicScreen) { Custom_Message_Sub_General_Public_Screen_One_Room = 1031,//单房间 Custom_Message_Sub_General_Public_Screen_All_Room = 1032,///全部房间 }; - +///通用飘屏 +//CustomMessageType_General_Floating_Screen = 105, +typedef NS_ENUM(NSUInteger, CustomMessageTypeGeneralFloatingScreen) { + ///所有房间 + Custom_Message_Sub_General_Floating_Screen_One_Room = 1051,//单房间 + Custom_Message_Sub_General_Floating_Screen_All_Room = 1052,///全部房间 +}; @interface AttachmentModel : PIBaseModel @property (nonatomic,assign) int first; @property (nonatomic,assign) int second; diff --git a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m index 89627386..04b4e8a2 100644 --- a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m +++ b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m @@ -188,7 +188,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor]; header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor]; self.pagingView.mainTableView.mj_header = header; - + [ClientConfig shareConfig].inviteCode = @""; diff --git a/YuMi/Modules/YMRoom/View/AnimationView/Model/PIBaseAnimationViewModel.h b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIBaseAnimationViewModel.h index d1032e4d..a6e64ea8 100644 --- a/YuMi/Modules/YMRoom/View/AnimationView/Model/PIBaseAnimationViewModel.h +++ b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIBaseAnimationViewModel.h @@ -17,6 +17,7 @@ typedef enum : NSUInteger { GiftBannerType_Tarrow,//塔罗 GiftBannerType_Common_H5,//通用h5 GiftBannerType_Magic_House,//魔法屋 + GiftBannerType_General_Floating_Screen,///通用飘屏 } GiftBannerType; NS_ASSUME_NONNULL_BEGIN diff --git a/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.h b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.h new file mode 100644 index 00000000..3d1a0dfc --- /dev/null +++ b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.h @@ -0,0 +1,38 @@ +// +// PIUniversalBannerModel.h +// YuMi +// +// Created by duoban on 2024/3/19. +// + +#import +#import +NS_ASSUME_NONNULL_BEGIN +@class PIUniversalBannerItemModel; +@interface PIUniversalBannerModel : NSObject +@property(nonatomic,copy) NSDictionary *template; +@property(nonatomic,copy) NSString *textColor; +@property(nonatomic,assign) CGFloat fontSize; +@property(nonatomic,copy) NSString *resourceType; +@property(nonatomic,copy) NSString *resourceContent; +@property(nonatomic,assign) int skipType; +@property(nonatomic,copy) NSString *skipContent; +@property(nonatomic,copy) NSString *svgaTextKey; +@property(nonatomic,copy) NSArray *contents; +@property(nonatomic,assign) CGFloat resourceWidth; +@property(nonatomic,assign) CGFloat resourceHeight; +@property(nonatomic,strong) SVGAVideoEntity *videoItem; +@property(nonatomic,strong) UIImage *image; +@end + + + +@interface PIUniversalBannerItemModel : NSObject +@property(nonatomic,copy) NSString *type; +@property(nonatomic,copy) NSString *textColor; +@property(nonatomic,copy) NSString *key; +@property(nonatomic,copy) NSDictionary *text; +@property(nonatomic,assign) int skipType; +@property(nonatomic,copy) NSString *skipContent; +@end +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.m b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.m new file mode 100644 index 00000000..f88bcfc5 --- /dev/null +++ b/YuMi/Modules/YMRoom/View/AnimationView/Model/PIUniversalBannerModel.m @@ -0,0 +1,17 @@ +// +// PIUniversalBannerModel.m +// YuMi +// +// Created by duoban on 2024/3/19. +// + +#import "PIUniversalBannerModel.h" + +@implementation PIUniversalBannerModel ++ (NSDictionary *)objectClassInArray { + return @{@"contents":PIUniversalBannerItemModel.class}; +} +@end +@implementation PIUniversalBannerItemModel + +@end diff --git a/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.h b/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.h new file mode 100644 index 00000000..096f3352 --- /dev/null +++ b/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.h @@ -0,0 +1,28 @@ +// +// PIUniversalBannerView.h +// YuMi +// +// Created by duoban on 2024/3/19. +// + +#import +#import "PIUniversalBannerModel.h" + +NS_ASSUME_NONNULL_BEGIN +@class PIUniversalBannerView; +@protocol PIUniversalBannerViewDelegate + +- (void)pIUniversalBannerView:(PIUniversalBannerView *)view didClick:(PIUniversalBannerModel *)model; + +@end + +@interface PIUniversalBannerView : UIView +@property (nonatomic,assign) BOOL isSvga; +@property (nonatomic,strong) PIUniversalBannerModel *model; + + +@property (nonatomic,weak) id delegate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.m b/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.m new file mode 100644 index 00000000..2dc21d77 --- /dev/null +++ b/YuMi/Modules/YMRoom/View/AnimationView/PIUniversalBannerView.m @@ -0,0 +1,142 @@ +// +// PIUniversalBannerView.m +// YuMi +// +// Created by duoban on 2024/3/19. +// +#import +#import "YUMIMacroUitls.h" +#import "DJDKMIMOMColor.h" +#import "PIUniversalBannerView.h" +#import +#import "DJDKMIMOMColor.h" +#import "YuMi-swift.h" +@interface PIUniversalBannerView() +@property (strong, nonatomic) SVGAParser *parser; +@property (nonatomic,strong) SVGAImageView *svgaView; +@property (nonatomic,strong) UIImageView *bgImageView; +@property (nonatomic,strong) UILabel *titleView; +@property (nonatomic,strong) UIButton *clickBtn; +@property(nonatomic,strong) SVGAVideoEntity *videoItem; +@end +@implementation PIUniversalBannerView + + +-(instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.bgImageView]; + [self addSubview:self.svgaView]; + [self addSubview:self.titleView]; + [self addSubview:self.clickBtn]; + +} +- (void)initSubViewConstraints { + [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + [self.svgaView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.bottom.equalTo(self); + make.leading.trailing.equalTo(self).inset(kGetScaleWidth(70)); + }]; + + [self.clickBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self); + }]; + +} +-(void)setModel:(PIUniversalBannerModel *)model{ + _model = model; + NSDictionary *textDic = model.template; + if(textDic.allKeys.count == 0)return ; + NSString *title = textDic[@"zh-CHT"] == nil ? textDic[textDic.allKeys.firstObject] : textDic[@"zh-CHT"]; + if(title.length == 0)return; + + NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] initWithString:title attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:_model.fontSize],NSForegroundColorAttributeName:[DJDKMIMOMColor colorWithHexString:_model.textColor]}]; + for (PIUniversalBannerItemModel *model in _model.contents) { + if([model.type isEqualToString:@"TEXT"]){ + NSDictionary *subTextDic = model.text; + if(subTextDic.allKeys.count > 0){ + NSString *subText = subTextDic[@"zh-CHT"] == nil ? subTextDic[subTextDic.allKeys.firstObject] : subTextDic[@"zh-CHT"]; + NSAttributedString *attText = [[NSAttributedString alloc]initWithString:subText attributes:@{NSForegroundColorAttributeName:[DJDKMIMOMColor colorWithHexString:model.textColor]}]; + [attribute replaceCharactersInRange:[attribute.string rangeOfString:[NSString stringWithFormat:@"{%@}",model.key]] withAttributedString:attText]; + } + + } + + } + if(_isSvga == YES){ + self.bgImageView.hidden = YES; + self.svgaView.hidden = NO; + self.titleView.hidden = YES; + self.svgaView.loops = 1; + self.svgaView.clearsAfterStop = NO; + self.svgaView.videoItem = _model.videoItem; + [self.svgaView setAttributedText:attribute forKey:_model.svgaTextKey]; + [self.svgaView startAnimation]; + }else{ + self.bgImageView.hidden = NO; + self.bgImageView.image = _model.image; + self.titleView.hidden = NO; + self.svgaView.hidden = YES; + self.titleView.attributedText = attribute; + } +} + +-(void)clickAction{ + if(self.delegate && + [self.delegate respondsToSelector:@selector(pIUniversalBannerView:didClick:)]){ + [self.delegate pIUniversalBannerView:self didClick:self.model]; + } +} +#pragma mark -懒加载 +- (UIImageView *)bgImageView{ + if (!_bgImageView){ + _bgImageView = [UIImageView new]; + _bgImageView.userInteractionEnabled = YES; + } + return _bgImageView; +} +-(UILabel *)titleView{ + if (!_titleView){ + _titleView = [UILabel new]; + _titleView.textAlignment = NSTextAlignmentCenter; + _titleView.numberOfLines = 2; + } + return _titleView; +} +- (SVGAParser *)parser { + if (!_parser) { + _parser = [[SVGAParser alloc]init]; + } + return _parser; +} +- (SVGAImageView *)svgaView { + if (!_svgaView) { + _svgaView= [[SVGAImageView alloc]init]; + _svgaView.backgroundColor = [UIColor clearColor]; + _svgaView.userInteractionEnabled = YES; + } + return _svgaView; +} +-(UIButton *)clickBtn{ + if (!_clickBtn){ + _clickBtn = [UIButton new]; + [_clickBtn addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside]; + + } + return _clickBtn; +} + +@end diff --git a/YuMi/Modules/YMRoom/View/AnimationView/XPRoomAnimationView.m b/YuMi/Modules/YMRoom/View/AnimationView/XPRoomAnimationView.m index b8668a05..3c936f71 100644 --- a/YuMi/Modules/YMRoom/View/AnimationView/XPRoomAnimationView.m +++ b/YuMi/Modules/YMRoom/View/AnimationView/XPRoomAnimationView.m @@ -63,10 +63,11 @@ #import "XPTreasureFairyGiftView.h" #import "XPRoomTarrowBannerView.h" #import "PIRoomGiftBroadcastWindow.h" +#import "PIUniversalBannerModel.h" +#import "PIUniversalBannerView.h" - -@interface XPRoomAnimationView () +@interface XPRoomAnimationView () ///展示的不同层级 ///最底层的 @property (nonatomic,strong) XPRoomAnimationHitView * lowLevelView; @@ -254,6 +255,8 @@ [self receiveTarotBanner:attachment]; }else if (attachment.first == CustomMessageType_Common_H5 &&(attachment.second == Custom_Message_Sub_Common_H5_Novice || attachment.second == Custom_Message_Sub_Common_H5_Advanced)){ [self receiveCommonH5Banner:attachment]; + }else if (attachment.first == CustomMessageType_General_Floating_Screen && attachment.second == Custom_Message_Sub_General_Floating_Screen_All_Room ){ + [self receiveRoomGeneralFloatingScreen:attachment]; } } } @@ -365,6 +368,8 @@ [self receiveTarotBanner:attachment]; }else if (attachment.first == CustomMessageType_Common_H5 &&(attachment.second == Custom_Message_Sub_Common_H5_Novice || attachment.second == Custom_Message_Sub_Common_H5_Advanced)){ [self receiveCommonH5Banner:attachment]; + }else if (attachment.first == CustomMessageType_General_Floating_Screen && attachment.second == Custom_Message_Sub_General_Floating_Screen_One_Room){ + [self receiveRoomGeneralFloatingScreen:attachment]; } } } @@ -386,8 +391,102 @@ [self userEnterRoom:content ext:extModel]; } } +#pragma mark - 收到通用飘屏 +-(void)receiveRoomGeneralFloatingScreen:(AttachmentModel *)attacment{ + PIBaseAnimationViewModel *roomGraffiti = [PIBaseAnimationViewModel new]; + roomGraffiti.data = attacment.data; + roomGraffiti.type = GiftBannerType_General_Floating_Screen; + roomGraffiti.first = attacment.first; + roomGraffiti.second = attacment.second; + if(self.animationListB.count == 0 && self.isPlayOfB == NO){ + [self createGeneralFloatingScreenAnimation:roomGraffiti]; + } + [self.animationListB addObject:roomGraffiti]; +} +- (void)createGeneralFloatingScreenAnimation:(PIBaseAnimationViewModel *)attacment{ + self.isPlayOfB = YES; + CGFloat top = self.isPlayOfA == YES ? (self.broadCastHieght + statusbarHeight) : (kNavigationHeight + 15); + + PIUniversalBannerModel *model = [PIUniversalBannerModel modelWithDictionary:attacment.data]; + BOOL isSvga = [model.resourceType isEqualToString:@"SVGA"]; + __block PIUniversalBannerView *bannerView; + if (isSvga == YES) { + + SVGAParser *parser = [SVGAParser new]; + [parser parseWithURL:[NSURL URLWithString:model.resourceContent] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + model.videoItem = videoItem; + bannerView = [[PIUniversalBannerView alloc]initWithFrame:CGRectMake(0, top, model.resourceWidth, model.resourceHeight) ]; + [self showGeneralFloatingScreenView:bannerView model:model]; + } failureBlock:^(NSError * _Nonnull error) { -#pragma mark - 收到星级厨房飘屏 + }]; + }else{ + NetImageView *imageView = [NetImageView new]; + [imageView loadImageWithUrl:model.resourceContent completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { + model.image = image; + CGFloat width = image.size.width <= 0 ? kGetScaleWidth(60) : image.size.width; + CGFloat height = image.size.height ; + CGFloat getHeigth = KScreenWidth * height / width; + bannerView = [[PIUniversalBannerView alloc]initWithFrame:CGRectMake(0, top, KScreenWidth, getHeigth) ]; + [self showGeneralFloatingScreenView:bannerView model:model]; + + }]; + } + +} +-(void)showGeneralFloatingScreenView:(PIUniversalBannerView *)bannerView model:(PIUniversalBannerModel *)model{ + BOOL isSvga = [model.resourceType isEqualToString:@"SVGA"]; + bannerView.isSvga = isSvga; + bannerView.model = model; + bannerView.delegate = self; + [self.highLevleView addSubview:bannerView]; + POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter]; + springAnimation.springSpeed = 12; + springAnimation.springBounciness = 10.f; + springAnimation.fromValue = [NSValue valueWithCGPoint:bannerView.center]; + springAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(bannerView.frame.size.width / 2, bannerView.center.y)]; + [springAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + if (finished) { + POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter]; + moveAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, bannerView.center.y)]; + moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth/2, bannerView.center.y)]; + moveAnimation.beginTime = CACurrentMediaTime() + 3; + moveAnimation.duration = 0.5; + moveAnimation.repeatCount = 1; + moveAnimation.removedOnCompletion = YES; + @kWeakify(self); + [moveAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + @kStrongify(self); + if (finished) { + [bannerView removeFromSuperview]; + self.isPlayOfB = NO; + if(self.animationListB.count > 0){ + [self.animationListB removeObjectAtIndex:0]; + } + [self playAnimationWithModel]; + } + }]; + [bannerView pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"]; + } + }]; + [bannerView pop_addAnimation:springAnimation forKey:@"starKitchenOutAnimation"]; +} +#pragma mark - PIUniversalBannerViewDelegate +- (void)pIUniversalBannerView:(PIUniversalBannerView *)view didClick:(PIUniversalBannerModel *)model{ + if (model.skipType == 2){ + [self.delegate exitRoom]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [XPRoomViewController openRoom:model.skipContent viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; + }); + }else if (model.skipType == 3){ + XPWebViewController * webVC = [[XPWebViewController alloc] init]; + webVC.isPush = YES; + webVC.url = model.skipContent; + [self.delegate.getCurrentNav pushViewController:webVC animated:YES]; + } + +} +#pragma mark - 收到疯狂动物园飘屏 -(void)receiveRoomGraffitiStarKitchen:(AttachmentModel *)attacment{ PIBaseAnimationViewModel *roomGraffiti = [PIBaseAnimationViewModel new]; roomGraffiti.data = attacment.data; @@ -1719,6 +1818,8 @@ [self createCommonH5BannerAnimation:model]; }else if(model.type == GiftBannerType_Magic_House){ [self createGiftCompoundBannerAnimation:model]; + }else if (model.type == GiftBannerType_General_Floating_Screen){ + [self createGeneralFloatingScreenAnimation:model]; } } diff --git a/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m b/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m index dcac6e90..20883ceb 100644 --- a/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m +++ b/YuMi/Modules/YMRoom/View/StageView/AnchorStageView.m @@ -191,7 +191,16 @@ [TTPopup actionSheetWithItems:@[inviteMic, lockMic, muteMic]]; } else if (member.type == NIMTeamMemberTypeManager) {//管理员点击了空麦位 - [TTPopup actionSheetWithItems:@[lockMic, muteMic]]; + // 抱Ta上麦 + TTActionSheetConfig *inviteMic = [TTActionSheetConfig normalTitle:YMLocalizedString(@"AnchorStageView4") clickAction:^{ + XPRoomInviteUserViewController * inviteUserMicVC = [[XPRoomInviteUserViewController alloc] init]; + inviteUserMicVC.roomId = roomId; + inviteUserMicVC.position = position; + inviteUserMicVC.blindDateVipUid = roomInfo.blindDateVipUid; + [self.hostDelegate.getCurrentNav pushViewController:inviteUserMicVC animated:YES]; + }]; + + [TTPopup actionSheetWithItems:@[inviteMic,lockMic, muteMic]]; } else { // 2.2 非房主点击了空麦位 NSString* selfUid = [NSString stringWithFormat:@"%ld", (long)self.hostDelegate.getUserInfo.uid]; diff --git a/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.h b/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.h index 68b31c56..b8bf7fc0 100644 --- a/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.h +++ b/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.h @@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN -(void)receiveCommonH5Banner:(AttachmentModel *)attachment; - (void)receiveAnchorHourRank:(AttachmentModel *)attachment; - (void)receiveNobleLevelUp:(AttachmentModel *)attachment; +-(void)receiveRoomGeneralFloatingScreen:(AttachmentModel *)attacment; @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.m b/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.m index 02275d62..e2ef0070 100644 --- a/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.m +++ b/YuMi/Modules/YMTabbar/View/PIFullScreenBannerAnimation.m @@ -62,7 +62,9 @@ #import "XPTreasureFairyGiftView.h" #import "XPRoomTarrowBannerView.h" #import "PIRoomGiftBroadcastWindow.h" -@interface PIFullScreenBannerAnimation() +#import "PIUniversalBannerModel.h" +#import "PIUniversalBannerView.h" +@interface PIFullScreenBannerAnimation() ///礼物飘屏 PresentAchieveAbstractMatrix @property(nonatomic,strong) NSMutableArray *animationListA; ///玩法飘屏 YUMIPresentBigCaptureMatrix @@ -222,8 +224,101 @@ [self createBigPrizeAnimation:model]; }else if(model.type == GiftBannerType_Common_H5){ [self createCommonH5BannerAnimation:model]; + }else if (model.type == GiftBannerType_General_Floating_Screen){ + [self createGeneralFloatingScreenAnimation:model]; } } +#pragma mark - 通用飘屏 +-(void)receiveRoomGeneralFloatingScreen:(AttachmentModel *)attacment{ + PIBaseAnimationViewModel *roomGraffiti = [PIBaseAnimationViewModel new]; + roomGraffiti.data = attacment.data; + roomGraffiti.type = GiftBannerType_General_Floating_Screen; + roomGraffiti.first = attacment.first; + roomGraffiti.second = attacment.second; + if(self.animationListB.count == 0 && self.isPlayOfB == NO){ + [self createGeneralFloatingScreenAnimation:roomGraffiti]; + } + [self.animationListB addObject:roomGraffiti]; +} +- (void)createGeneralFloatingScreenAnimation:(PIBaseAnimationViewModel *)attacment{ + self.isPlayOfB = YES; + CGFloat top = self.isPlayOfA == YES ? (self.broadCastHieght + statusbarHeight) : (kNavigationHeight + 15); + + PIUniversalBannerModel *model = [PIUniversalBannerModel modelWithDictionary:attacment.data]; + BOOL isSvga = [model.resourceType isEqualToString:@"SVGA"]; + __block PIUniversalBannerView *bannerView; + if (isSvga == YES) { + + SVGAParser *parser = [SVGAParser new]; + [parser parseWithURL:[NSURL URLWithString:model.resourceContent] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { + model.videoItem = videoItem; + bannerView = [[PIUniversalBannerView alloc]initWithFrame:CGRectMake(0, top, model.resourceWidth, model.resourceHeight) ]; + [self showGeneralFloatingScreenView:bannerView model:model]; + } failureBlock:^(NSError * _Nonnull error) { + + }]; + }else{ + NetImageView *imageView = [NetImageView new]; + [imageView loadImageWithUrl:model.resourceContent completion:^(UIImage * _Nonnull image, NSURL * _Nonnull url) { + model.image = image; + CGFloat width = image.size.width <= 0 ? kGetScaleWidth(60) : image.size.width; + CGFloat height = image.size.height ; + CGFloat getHeigth = KScreenWidth * height / width; + bannerView = [[PIUniversalBannerView alloc]initWithFrame:CGRectMake(KScreenWidth, top, KScreenWidth, getHeigth) ]; + [self showGeneralFloatingScreenView:bannerView model:model]; + }]; + } + +} +-(void)showGeneralFloatingScreenView:(PIUniversalBannerView *)bannerView model:(PIUniversalBannerModel *)model{ + BOOL isSvga = [model.resourceType isEqualToString:@"SVGA"]; + bannerView.isSvga = isSvga; + bannerView.model = model; + bannerView.delegate = self; + [kWindow addSubview:bannerView]; + POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter]; + springAnimation.springSpeed = 12; + springAnimation.springBounciness = 10.f; + springAnimation.fromValue = [NSValue valueWithCGPoint:bannerView.center]; + springAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(bannerView.frame.size.width / 2, bannerView.center.y)]; + [springAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + if (finished) { + POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter]; + moveAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, bannerView.center.y)]; + moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth/2, bannerView.center.y)]; + moveAnimation.beginTime = CACurrentMediaTime() + 3; + moveAnimation.duration = 0.5; + moveAnimation.repeatCount = 1; + moveAnimation.removedOnCompletion = YES; + @kWeakify(self); + [moveAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) { + @kStrongify(self); + if (finished) { + [bannerView removeFromSuperview]; + self.isPlayOfB = NO; + if(self.animationListB.count > 0){ + [self.animationListB removeObjectAtIndex:0]; + } + [self playAnimationWithModel]; + } + }]; + [bannerView pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"]; + } + }]; + [bannerView pop_addAnimation:springAnimation forKey:@"starKitchenOutAnimation"]; +} +#pragma mark - PIUniversalBannerViewDelegate +- (void)pIUniversalBannerView:(PIUniversalBannerView *)view didClick:(PIUniversalBannerModel *)model{ + if (model.skipType == 2){ + [XPRoomViewController openRoom:model.skipContent viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; + }else if (model.skipType == 3){ + XPWebViewController * webVC = [[XPWebViewController alloc] init]; + webVC.isPush = YES; + webVC.url = model.skipContent; + [[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:webVC animated:YES]; + } + +} #pragma mark - 收到h5通用飘屏 -(void)receiveCommonH5Banner:(AttachmentModel *)attachment{ diff --git a/YuMi/Modules/YMTabbar/View/TabbarViewController.m b/YuMi/Modules/YMTabbar/View/TabbarViewController.m index 9504638f..6a8e5d85 100644 --- a/YuMi/Modules/YMTabbar/View/TabbarViewController.m +++ b/YuMi/Modules/YMTabbar/View/TabbarViewController.m @@ -630,6 +630,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey; if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return; [self.roomAnimation receiveNobleLevelUp:attachment]; + }else if (attachment.first == CustomMessageType_General_Floating_Screen && attachment.second == Custom_Message_Sub_General_Floating_Screen_All_Room){ + if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return; + [self.roomAnimation receiveRoomGeneralFloatingScreen:attachment]; } } } diff --git a/YuMi/Modules/YMWeb/XPWebViewController.m b/YuMi/Modules/YMWeb/XPWebViewController.m index b7405caf..6a953df3 100644 --- a/YuMi/Modules/YMWeb/XPWebViewController.m +++ b/YuMi/Modules/YMWeb/XPWebViewController.m @@ -607,9 +607,12 @@ NSString * const kJSSavePictureShare = @"savePictureShare"; shareInfo.type = ShareType_H5; shareInfo.uid = [AccountInfoStorage instance].getUid; NSString *urlStr = ((NSString *)dic[@"toUrl"]).length > 0 ? dic[@"toUrl"] : @""; - shareInfo.shareUrl = urlStr; + NSString *title = ((NSString *)dic[@"shareTitle"]).length > 0 ? dic[@"shareTitle"] : @""; + shareInfo.shareUrl = [NSString stringWithFormat:@"%@",urlStr]; XPShareItem *cycle = [XPShareItem itemWitTag:XPShareItemTagFaceBook title:@"FaceBook" imageName:@"share_fb" disableImageName:@"share_fb"]; XPShareItem *wechat = [XPShareItem itemWitTag:XPShareItemTagLine title:@"Line" imageName:@"share_line" disableImageName:@"share_line"]; + wechat.isShareInvite = YES; + wechat.inviteTitle = title; XPShareItem *qq = [XPShareItem itemWitTag:XPShareItemTagCopyLink title:YMLocalizedString(@"XPWebViewNavView1") imageName:@"share_copy_link" disableImageName:@"share_copy_link"]; XPShareItem *save = [XPShareItem itemWitTag:XPShareItemTagAppSaveAlbum title:YMLocalizedString(@"PIWebViewSavePhotoView4") imageName:@"share_save_icon" disableImageName:@"share_save_icon"]; diff --git a/YuMi/Tools/YMLine/PILineManager.swift b/YuMi/Tools/YMLine/PILineManager.swift index 2ab1b790..faaccf4d 100644 --- a/YuMi/Tools/YMLine/PILineManager.swift +++ b/YuMi/Tools/YMLine/PILineManager.swift @@ -62,4 +62,5 @@ public class PILineLoginManager: NSObject { @objc public class func destroyLine() { PILineLoginManager.manager = nil } + } diff --git a/YuMi/YuMi.entitlements b/YuMi/YuMi.entitlements index 80b5221d..d77564ea 100644 --- a/YuMi/YuMi.entitlements +++ b/YuMi/YuMi.entitlements @@ -8,5 +8,9 @@ Default + com.apple.developer.associated-domains + + applinks:cebg.t4m.cn + diff --git a/YuMi/YuMiRelease.entitlements b/YuMi/YuMiRelease.entitlements index 80b5221d..d77564ea 100644 --- a/YuMi/YuMiRelease.entitlements +++ b/YuMi/YuMiRelease.entitlements @@ -8,5 +8,9 @@ Default + com.apple.developer.associated-domains + + applinks:cebg.t4m.cn +