Last Updated on : 2023-07-13 07:14:39download
Sharing UI BizBundle provides the capabilities to share resources to third parties such as SMS, email, WeChat, or Tencent QQ.
Add the components of the Sharing UI BizBundle to the Podfile
and run the command pod update
.
source 'https://github.com/tuya/tuya-private-specs.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '11.0'
target 'your_target_name' do
# Implements sharing to WeChat. (optional)
pod 'ThingSocialWeChat', '~> 5.0.0'
# Implements sharing to Tencent QQ. (optional)
pod 'ThingSocialQQ', '~> 5.0.0'
# Add the Sharing UI BizBundle. (required)
pod 'ThingSmartShareBizBundle', '~> 5.0.0'
end
The Sharing UI BizBundle relies on the implementation of the protocol ThingSocialProtocol
to provide services. You can view the ThingSocialProtocol.h
file in the ThingModuleServices
component.
@class ThingSocialShareModel;
typedef NS_ENUM(NSUInteger, ThingSocialType) {
ThingSocialWechat = 0,
ThingSocialWechatMoment = 1, // Shared to Moments of WeChat.
ThingSocialQQ = 2,
ThingSocialQQSpace = 3, // Shared to Tencent Qzone.
ThingSocialEmail = 7,
ThingSocialSMS = 8,
ThingSocialMore = 11,
};
typedef NS_ENUM(NSUInteger, ThingSocialShareContentType) {
ThingSocialShareContentText, // Sharing is unused.
ThingSocialShareContenttImage, // Shares a single image.
ThingSocialShareContentH5, // Shares a web page.
ThingSocialShareContentImageUrl, // Shares the URL of a single image.
};
typedef void (^ThingSuccessHandler)(void);
typedef void (^ThingFailureHandler)(void);
@protocol ThingSocialProtocol <NSObject>
@optional
// Registers a type of sharing.
- (void)registerWithType:(ThingSocialType)type appKey:(NSString *)appKey appSecret:(NSString *)appSecret;
- (void)registerWithType:(ThingSocialType)type appKey:(NSString *)appKey appSecret:(NSString *)appSecret universalLink:(NSString *)universalLink;
// Shares resources.
- (void)shareTo:(ThingSocialType)type shareModel:(ThingSocialShareModel *)shareModel success:(ThingSuccessHandler)success failure:(ThingFailureHandler)failure;
// Indicates whether initialization and installation are finished.
- (BOOL)avaliableForType:(ThingSocialType)type;
// The redirection feature.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options;
// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler;
@end
Before the call of any API method, make sure that the user has logged in to the app.
To enable sharing to WeChat or Tencent QQ, you must register the sharing service on the official website of WeChat or Tencent QQ and get appKey
and appSecret
.
ObjC:
#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingSocialProtocol.h>
id<ThingSocialProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingSocialProtocol)];
[impl registerWithType:ThingSocialWechat appKey:@"<#appKey#>" appSecret:@"<#appSecret#>" universalLink:@"<#universalLink#>"];
[impl registerWithType:ThingSocialQQ appKey:@"<#appKey#>" appSecret:@"<#appSecret#>" universalLink:@"<#universalLink#>"];
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
impl?.register?(with: ThingSocialType.wechat, appKey: "<#appKey#>", appSecret: "<#appSecret#>", universalLink:"<#universalLink#>")
impl?.register?(with: ThingSocialType.QQ, appKey: "<#appKey#>", appSecret: "<#appSecret#>", universalLink:"<#universalLink#>")
continueUserActivity
and openURL
of AppDelegate
To enable sharing to WeChat or Tencent QQ, the methods continueUserActivity
and openURL
of AppDelegate
must be written.
ObjC:
#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingSocialProtocol.h>
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
id<ThingSocialProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingSocialProtocol)];
[impl application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
if ([[url scheme] hasPrefix:@"wx"]) {
id<ThingSocialProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingSocialProtocol)];
return [impl application:app openURL:url options:options];
}
return YES;
}
Swift:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
let _ = impl?.application?(application, continue: userActivity, restorationHandler: restorationHandler)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let newOptions: [String: Any] = options.reduce(into: [:]) { (result, tmp) in
result[tmp.key.rawValue] = tmp.value
}
if url.scheme?.hasPrefix("wx") == true {
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
return (impl?.application?(app, open: url, options: newOptions))!
}
return true
}
ObjC:
#import <ThingSmartBizCore/ThingSmartBizCore.h>
#import <ThingModuleServices/ThingSocialProtocol.h>
id<ThingSocialProtocol> impl = [[ThingSmartBizCore sharedInstance] serviceOfProtocol:@protocol(ThingSocialProtocol)];
/// Shares text.
if ([impl avaliableForType:ThingSocialWechat]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialWechat];
shareModel.content = @"<#content#>";
shareModel.mediaType = ThingSocialShareContentText;
[impl shareTo:ThingSocialWechat shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares images.
if ([impl avaliableForType:ThingSocialWechat]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialWechat];
shareModel.image = [UIImage imageNamed:@"<#imageName#>"];
shareModel.mediaType = ThingSocialShareContenttImage;
[impl shareTo:ThingSocialWechat shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares URLs.
if ([impl avaliableForType:ThingSocialWechat]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialWechat];
shareModel.title = @"<#title#>";
shareModel.content = @"<#content#>";
shareModel.url = @"<#url#>";
shareModel.mediaType = ThingSocialShareContentH5;
[impl shareTo:ThingSocialWechat shareModel:shareModel success:^{
} failure:^{
}];
}
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
/// Shares text.
if impl?.avaliable?(for: ThingSocialType.wechat) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.wechat)!
shareModel.content = "<#content#>"
shareModel.mediaType = ThingSocialShareContentType.contentText
impl?.share?(to:ThingSocialType.wechat, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares images.
if impl?.avaliable?(for: ThingSocialType.wechat) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.wechat)!
shareModel.image = UIImage(named: "<#imageName#>")
shareModel.mediaType = ThingSocialShareContentType.contenttImage
impl?.share?(to:ThingSocialType.wechat, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares URLs.
if impl?.avaliable?(for: ThingSocialType.wechat) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.wechat)!
shareModel.title = "<#title#>"
shareModel.content = "<#content#>"
shareModel.url = "<#url#>"
shareModel.mediaType = ThingSocialShareContentType.contentH5
impl?.share?(to:ThingSocialType.wechat, shareModel: shareModel, success: {
}, failure: {
})
}
ObjC:
/// Shares text.
if ([impl avaliableForType:ThingSocialQQ]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialQQ];
shareModel.content = @"<#content#>";
shareModel.mediaType = ThingSocialShareContentText;
[impl shareTo:ThingSocialQQ shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares images.
if ([impl avaliableForType:ThingSocialQQ]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialQQ];
shareModel.image = [UIImage imageNamed:@"<#imageName#>"];
shareModel.mediaType = ThingSocialShareContenttImage;
[impl shareTo:ThingSocialQQ shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares URLs.
if ([impl avaliableForType:ThingSocialQQ]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialQQ];
shareModel.content = @"<#content#>";
shareModel.title = @"<#title#>";
shareModel.url = @"<#url#>";
shareModel.mediaType = ThingSocialShareContentH5;
[impl shareTo:ThingSocialQQ shareModel:shareModel success:^{
} failure:^{
}];
}
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
/// Shares text.
if impl?.avaliable?(for: ThingSocialType.QQ) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.QQ)!
shareModel.content = "<#content#>"
shareModel.mediaType = ThingSocialShareContentType.contentText
impl?.share?(to:ThingSocialType.QQ, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares images.
if impl?.avaliable?(for: ThingSocialType.QQ) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.QQ)!
shareModel.image = UIImage(named: "<#imageName#>")
shareModel.mediaType = ThingSocialShareContentType.contenttImage
impl?.share?(to:ThingSocialType.QQ, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares URLs.
if impl?.avaliable?(for: ThingSocialType.QQ) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.QQ)!
shareModel.title = "<#title#>"
shareModel.content = "<#content#>"
shareModel.url = "<#url#>"
shareModel.mediaType = ThingSocialShareContentType.contentH5
impl?.share?(to:ThingSocialType.QQ, shareModel: shareModel, success: {
}, failure: {
})
}
ObjC:
/// Shares text, images, and URLs.
if ([impl avaliableForType:ThingSocialSMS]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialSMS];
shareModel.content = @"<#content#>";
shareModel.image = [UIImage imageNamed:@"<#imageName#>"];
shareModel.url = @"<#url#>";
shareModel.recipients = @[@"<#phoneNumber#>"];
[impl shareTo:ThingSocialSMS shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares image URLs.
if ([impl avaliableForType:ThingSocialSMS]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialSMS];
shareModel.content = @"<#content#>";
shareModel.recipients = @[@"<#phoneNumber#>"];
shareModel.imageUrl = @"<#imageUrl#>";
shareModel.mediaType = ThingSocialShareContentImageUrl;
[impl shareTo:ThingSocialSMS shareModel:shareModel success:^{
} failure:^{
}];
}
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
/// Shares text, images, and URLs.
if impl?.avaliable?(for: ThingSocialType.SMS) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.SMS)!
shareModel.content = "<#content#>"
shareModel.image = UIImage(named: "<#imageName#>")
shareModel.url = "<#url#>"
shareModel.recipients = ["<#phoneNumber#>"]
impl?.share?(to:ThingSocialType.SMS, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares image URLs.
if impl?.avaliable?(for: ThingSocialType.SMS) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.SMS)!
shareModel.content = "<#content#>"
shareModel.recipients = ["<#phoneNumber#>"]
shareModel.imageUrl = "<#imageUrl#>"
shareModel.mediaType = ThingSocialShareContentType.contentImageUrl
impl?.share?(to:ThingSocialType.SMS, shareModel: shareModel, success: {
}, failure: {
})
}
ObjC:
/// Shares text, images, and URLs.
if ([impl avaliableForType:ThingSocialEmail]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialEmail];
shareModel.title = @"<#title#>";
shareModel.content = @"<#content#>";
shareModel.url = @"<#url#>";
shareModel.image = [UIImage imageNamed:@"<#imageName#>"];
shareModel.recipients = @[@"<#email#>"];
shareModel.ccRecipients = @[@"<#email#>"];
shareModel.bccRecipients = @[@"<#email#>"];
[impl shareTo:ThingSocialEmail shareModel:shareModel success:^{
} failure:^{
}];
}
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
/// Shares text, images, and URLs.
if impl?.avaliable?(for: ThingSocialType.email) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.email)!
shareModel.title = "<#title#>"
shareModel.content = "<#content#>"
shareModel.url = "<#url#>"
shareModel.image = UIImage(named: "<#imageName#>")
shareModel.recipients = ["<#email#>"]
shareModel.ccRecipients = ["<#email#>"]
shareModel.bccRecipients = ["<#email#>"]
impl?.share?(to:ThingSocialType.email, shareModel: shareModel, success: {
}, failure: {
})
}
ObjC:
/// Shares text.
if ([impl avaliableForType:ThingSocialMore]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialMore];
shareModel.title = @"<#title#>";
shareModel.content = @"<#content#>";
shareModel.mediaType = ThingSocialShareContentText;
[impl shareTo:ThingSocialMore shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares images.
if ([impl avaliableForType:ThingSocialMore]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialMore];
shareModel.image = [UIImage imageNamed:@"<#imageName#>"];
shareModel.mediaType = ThingSocialShareContenttImage;
[impl shareTo:ThingSocialMore shareModel:shareModel success:^{
} failure:^{
}];
}
/// Shares URLs.
if ([impl avaliableForType:ThingSocialMore]) {
ThingSocialShareModel *shareModel = [[ThingSocialShareModel alloc] initWithShareType:ThingSocialMore];
shareModel.url = @"<#url#>";
shareModel.mediaType = ThingSocialShareContentH5;
[impl shareTo:ThingSocialMore shareModel:shareModel success:^{
} failure:^{
}];
}
Swift:
let impl = ThingSmartBizCore.sharedInstance().service(of: ThingSocialProtocol.self) as? ThingSocialProtocol
/// Shares text.
if impl?.avaliable?(for: ThingSocialType.more) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.more)!
shareModel.title = "<#title#>"
shareModel.content = "<#content#>"
shareModel.mediaType = ThingSocialShareContentType.contentText
impl?.share?(to:ThingSocialType.more, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares images.
if impl?.avaliable?(for: ThingSocialType.more) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.more)!
shareModel.image = UIImage(named: "<#imageName#>")
shareModel.mediaType = ThingSocialShareContentType.contenttImage
impl?.share?(to:ThingSocialType.more, shareModel: shareModel, success: {
}, failure: {
})
}
/// Shares URLs.
if impl?.avaliable?(for: ThingSocialType.more) == true {
let shareModel = ThingSocialShareModel(share: ThingSocialType.more)!
shareModel.url = "<#url#>"
shareModel.mediaType = ThingSocialShareContentType.contentH5
impl?.share?(to:ThingSocialType.more, shareModel: shareModel, success: {
}, failure: {
})
}
Set Universal Links as described in Apple’s documentation.
The settings of Universal Links for WeChat must meet the following requirements:
https
./*
) must be added to paths
for the app.Example:
{
"appID": "8P7343TG54.com.tencent.xin.SDKSample",
"paths": ["/sdksample/*"]
}
Enable Associated Domains and set the domains for Universal Links.
Check whether the settings of Universal Links for the app are successful. For more information, see SDK Access Success Verification Guidelines.
Register your account on the WeChat developer registration page and set your mobile app. Then, you can get the AppID required for app development. In line with WeChat’s regulations, after app registration, you must submit app information for review. Your app can be launched only after it is approved by WeChat.
Select your project in Xcode.
Choose TARGETS > info > URL type, and set URL Scheme to your registered app ID.
In Xcode, choose TARGETS > info, and add weixin
and weixinULAPI
to LSApplicationQueriesSchemes.
For more information, see WeChat documentation.
Select your project in Xcode.
Go to TARGETS.
Choose info > URL type, and set URL Scheme.
The following example shows the URL Scheme field value consists of tencent
and appid
.
The following figure shows the sample settings.
For more information, see Tencent QQ documentation.
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback