mirror of
https://github.com/RxReader/tencent_kit.git
synced 2025-05-21 01:07:12 +08:00
升级 1.1.0
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
## 1.1.0 - 2020.06.13
|
||||
|
||||
* 升级 V2 插件
|
||||
* 升级 Android/iOS SDK
|
||||
|
||||
## 1.0.4 - 2019.12.16
|
||||
|
||||
* 适配 Android Q 本地分享适配(别问为什么,腾讯有毒!)
|
||||
|
@ -75,7 +75,8 @@ class _HomeState extends State<Home> {
|
||||
ListTile(
|
||||
title: const Text('环境检查'),
|
||||
onTap: () async {
|
||||
String content = 'tencent: ${await _tencent.isInstalled()}';
|
||||
String content =
|
||||
'QQ install: ${await _tencent.isQQInstalled()}\nTIM install: ${await _tencent.isTIMInstalled()}';
|
||||
_showTips('环境检查', content);
|
||||
},
|
||||
),
|
||||
@ -139,7 +140,7 @@ class _HomeState extends State<Home> {
|
||||
title: const Text('文本分享'),
|
||||
onTap: () {
|
||||
_tencent.shareText(
|
||||
scene: TencentScene.SCENE_QZONE,
|
||||
scene: TencentScene.SCENE_QQ,
|
||||
summary: '分享测试',
|
||||
);
|
||||
},
|
||||
|
@ -155,4 +155,20 @@ typedef void (^sendResultBlock)(NSDictionary *result);
|
||||
\return iPhoneTIM下载地址
|
||||
*/
|
||||
+ (NSString *)getTIMInstallUrl;
|
||||
|
||||
#pragma mark - Log
|
||||
/*! @brief 调用此函数可以导出QQSDK的Log到第三方中,用于定位问题
|
||||
|
||||
注意1:SDK会强引用这个block,注意不要导致内存泄漏,注意不要导致内存泄漏
|
||||
注意2:调用过一次startLog by block之后,如果再调用一次任意方式的startLoad,会释放上一次logBlock,不再回调上一个logBlock
|
||||
*
|
||||
* @param logBlock 打印log的回调block
|
||||
*/
|
||||
+ (void)startLogWithBlock:(QQApiLogBolock)logBlock;
|
||||
///停止回调打印
|
||||
+ (void)stopLog;
|
||||
///设置打印日志到文件开关on/off,如果不设置,默认不打印到文件
|
||||
+ (void)setSwitchPrintLogToFile:(BOOL)on;
|
||||
///日志文件目录
|
||||
+ (NSString*)getLogFilePath;
|
||||
@end
|
||||
|
@ -37,6 +37,7 @@ typedef NS_ENUM(NSInteger,QQApiSendResultCode) {
|
||||
EQQAPIQZONENOTSUPPORTIMAGE = 10001, //qzone分享不支持image类型分享
|
||||
EQQAPIVERSIONNEEDUPDATE = 10002, //当前QQ版本太低,需要更新至新版本才可以支持
|
||||
ETIMAPIVERSIONNEEDUPDATE = 10004, //当前TIM版本太低,需要更新至新版本才可以支持
|
||||
EAPPURLTYPESILLEGALITY = 20000, //(>=3.3.8)第三方APP的info.plist中UrlTypes字段存在QQ的UrlScheme
|
||||
};
|
||||
|
||||
#pragma mark - QQApiObject(分享对象类型)
|
||||
@ -66,6 +67,9 @@ typedef NS_ENUM(NSUInteger, MiniProgramType) {
|
||||
MiniProgramType_Preview=4, // 预览版
|
||||
};
|
||||
|
||||
/// 打印回调的block
|
||||
typedef void(^QQApiLogBolock)(NSString *logStr);
|
||||
|
||||
// QQApiObject
|
||||
/** \brief 所有在QQ及插件间发送的数据对象的根类。
|
||||
*/
|
||||
@ -106,9 +110,16 @@ __attribute__((visibility("default"))) @interface QQApiMiniProgramObject : NSObj
|
||||
//唤起小程序 - QQ 8.1.8
|
||||
__attribute__((visibility("default"))) @interface QQApiLaunchMiniProgramObject : QQApiObject
|
||||
@property(nonatomic,retain) NSString* miniAppID; //必填,小程序的AppId(注:必须在QQ互联平台中,将该小程序与分享的App绑定)
|
||||
@property(nonatomic,retain) NSString* miniPath; //必填,小程序的展示路径
|
||||
@property(nonatomic,retain) NSString* miniPath; //小程序的展示路径,不填展示默认小程序首页
|
||||
@property(nonatomic,assign) MiniProgramType miniprogramType; //非必填,小程序的类型,默认正式版(3),可选测试版(1)、开发版(0)
|
||||
@end
|
||||
|
||||
//小程序唤起第三方 - SDK 3.3.9
|
||||
__attribute__((visibility("default"))) @interface QQApiMiniProgramLaunchObject : QQApiObject
|
||||
@property(nonatomic,copy) NSString* appParameter; //小程序带来的数据,透传
|
||||
+ (instancetype)newWithAppParameter:(NSString*)parameter;
|
||||
@end
|
||||
|
||||
// QQApiResultObject
|
||||
/** \brief 用于请求回应的数据类型。
|
||||
<h3>可能错误码及描述如下:</h3>
|
||||
|
@ -164,8 +164,8 @@ typedef NS_ENUM(NSUInteger, TencentAuthMode) {
|
||||
|
||||
/**
|
||||
* 初始化TencentOAuth对象
|
||||
* \param appId 第三方应用在互联开放平台申请的唯一标识
|
||||
* \param delegate 第三方应用用于接收请求返回结果的委托对象
|
||||
* \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
|
||||
* \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
|
||||
* \return 初始化后的授权登录对象
|
||||
*/
|
||||
- (id)initWithAppId:(NSString *)appId
|
||||
@ -173,15 +173,38 @@ typedef NS_ENUM(NSUInteger, TencentAuthMode) {
|
||||
|
||||
/**
|
||||
* 初始化TencentOAuth对象(>=3.3.7)
|
||||
* \param appId 第三方应用在互联开放平台申请的唯一标识
|
||||
* \param universalLink 第三方应用在互联开放平台注册的universallink,和bundleID一一对应
|
||||
* \param delegate 第三方应用用于接收请求返回结果的委托对象
|
||||
* \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
|
||||
* \param universalLink 可以为nil,第三方应用在互联开放平台注册的UniversalLink,和bundleID一一对应(当为nil时,互联平台会按规则生成universallink,详见官网说明)
|
||||
* \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
|
||||
* \return 初始化后的授权登录对象
|
||||
*
|
||||
****【使用说明】*****
|
||||
* 1、支持BundleId与UniversalLink的一一对应,主要目的“是为了解决应用的iPhone版本和iPad HD版本共用同一个AppId,导致同时安装情况下的跳转问题"。
|
||||
* 2 、由于手Q版本在 >=8.1.8 后才支持了这种对应方式,所以一旦使用,“务必做到”及时知会用户升级手Q版本。
|
||||
****
|
||||
*/
|
||||
- (id)initWithAppId:(NSString *)appId
|
||||
andUniversalLink:(NSString *)universalLink
|
||||
andDelegate:(id<TencentSessionDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* 初始化TencentOAuth对象(>=3.3.8)
|
||||
* \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
|
||||
* \param enabled 默认为NO,第三方应用是否将sdk和手机QQ的交互方式切换为UniversalLink方式,启用后则在iOS9及以上的系统都会生效UniversalLink方式;否则,默认仅在iOS13及以上的系统生效UniversalLink方式。
|
||||
* \param universalLink 可以为nil,第三方应用在互联开放平台注册的UniversalLink,和bundleID一一对应(当为nil时,互联平台会按规则生成UniversalLink,详见官网说明)
|
||||
* \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
|
||||
* \return 初始化后的授权登录对象
|
||||
*
|
||||
*****【使用说明】*****
|
||||
* 1、支持sdk与手Q的交互切换为UniversalLink模式,主要目的"是为了避免手Q的UrlScheme被其他应用抢注后,导致sdk接口功能受到影响"。
|
||||
* 2 、由于手Q版本在 >=8.1.3 后才适配了UniversalLink,所以一旦开启了enabled开关,“务必做到”及时知会用户升级手Q版本。
|
||||
*****
|
||||
*/
|
||||
- (id)initWithAppId:(NSString *)appId
|
||||
enableUniveralLink:(BOOL)enabled
|
||||
universalLink:(NSString *)universalLink
|
||||
delegate:(id<TencentSessionDelegate>)delegate;
|
||||
|
||||
/**
|
||||
* 判断用户手机上是否安装手机QQ
|
||||
* \return YES:安装 NO:没安装
|
||||
|
Binary file not shown.
@ -20,7 +20,6 @@ class Tencent {
|
||||
static const String _METHOD_REGISTERAPP = 'registerApp';
|
||||
static const String _METHOD_ISQQINSTALLED = 'isQQInstalled';
|
||||
static const String _METHOD_ISTIMINSTALLED = 'isTIMInstalled';
|
||||
static const String _METHOD_ISQQLITEINSTALLED = 'isQQLiteInstalled';
|
||||
static const String _METHOD_LOGIN = 'login';
|
||||
static const String _METHOD_LOGOUT = 'logout';
|
||||
static const String _METHOD_SHAREMOOD = 'shareMood';
|
||||
@ -77,16 +76,14 @@ class Tencent {
|
||||
}) {
|
||||
assert(appId != null && appId.isNotEmpty);
|
||||
assert(!Platform.isIOS || universalLink == null);
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_APPID: appId,
|
||||
// _ARGUMENT_KEY_UNIVERSALLINK: universalLink,
|
||||
};
|
||||
|
||||
/// 兼容 iOS 空安全 -> NSNull
|
||||
if (universalLink != null) {
|
||||
arguments[_ARGUMENT_KEY_UNIVERSALLINK] = universalLink;
|
||||
}
|
||||
return _channel.invokeMethod(_METHOD_REGISTERAPP, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_REGISTERAPP,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_APPID: appId,
|
||||
if (universalLink?.isNotEmpty ?? false)
|
||||
_ARGUMENT_KEY_UNIVERSALLINK: universalLink,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// 登录
|
||||
@ -99,13 +96,6 @@ class Tencent {
|
||||
return _shareRespStreamController.stream;
|
||||
}
|
||||
|
||||
/// 检查QQ是否已安装
|
||||
Future<bool> isInstalled() async {
|
||||
return (await isQQInstalled()) ||
|
||||
(await isTIMInstalled()) ||
|
||||
(await isQQLiteInstalled());
|
||||
}
|
||||
|
||||
/// 检查QQ是否已安装
|
||||
Future<bool> isQQInstalled() {
|
||||
return _channel.invokeMethod(_METHOD_ISQQINSTALLED);
|
||||
@ -116,11 +106,6 @@ class Tencent {
|
||||
return _channel.invokeMethod(_METHOD_ISTIMINSTALLED);
|
||||
}
|
||||
|
||||
/// 检查QQ是否已安装
|
||||
Future<bool> isQQLiteInstalled() {
|
||||
return _channel.invokeMethod(_METHOD_ISQQLITEINSTALLED);
|
||||
}
|
||||
|
||||
/// 登录
|
||||
Future<void> login({
|
||||
@required List<String> scope,
|
||||
@ -214,27 +199,17 @@ class Tencent {
|
||||
assert(imageUri != null && imageUri.isScheme(_SCHEME_FILE));
|
||||
});
|
||||
}
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
// _ARGUMENT_KEY_SUMMARY: summary,
|
||||
// _ARGUMENT_KEY_IMAGEURIS: imageUris != null ? new List.generate(imageUris.length, (int index) {
|
||||
// return imageUris[index].toString();
|
||||
// }) : null,
|
||||
// _ARGUMENT_KEY_VIDEOURI: videoUri != null ? videoUri.toString() : null,
|
||||
};
|
||||
|
||||
/// 兼容 iOS 空安全 -> NSNull
|
||||
if (summary != null && summary.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_SUMMARY] = summary;
|
||||
}
|
||||
if (imageUris != null && imageUris.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_IMAGEURIS] =
|
||||
imageUris.map((Uri imageUri) => imageUri.toString()).toList();
|
||||
}
|
||||
if (videoUri != null) {
|
||||
arguments[_ARGUMENT_KEY_VIDEOURI] = videoUri.toString();
|
||||
}
|
||||
return _channel.invokeMethod(_METHOD_SHAREMOOD, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_SHAREMOOD,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
if (summary?.isNotEmpty ?? false) _ARGUMENT_KEY_SUMMARY: summary,
|
||||
if (imageUris?.isNotEmpty ?? false)
|
||||
_ARGUMENT_KEY_IMAGEURIS:
|
||||
imageUris.map((Uri imageUri) => imageUri.toString()).toList(),
|
||||
if (videoUri != null) _ARGUMENT_KEY_VIDEOURI: videoUri.toString(),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// 分享 - 文本(Android调用的是系统API,故而不会有回调)
|
||||
@ -244,11 +219,13 @@ class Tencent {
|
||||
}) {
|
||||
assert(scene == TencentScene.SCENE_QQ);
|
||||
assert(summary != null && summary.isNotEmpty);
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_SUMMARY: summary,
|
||||
};
|
||||
return _channel.invokeMethod(_METHOD_SHARETEXT, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_SHARETEXT,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_SUMMARY: summary,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// 分享 - 图片
|
||||
@ -260,18 +237,15 @@ class Tencent {
|
||||
}) {
|
||||
assert(scene == TencentScene.SCENE_QQ);
|
||||
assert(imageUri != null && imageUri.isScheme(_SCHEME_FILE));
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_IMAGEURI: imageUri.toString(),
|
||||
// _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
};
|
||||
|
||||
/// 兼容 iOS 空安全 -> NSNull
|
||||
if (appName != null && appName.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_APPNAME] = appName;
|
||||
}
|
||||
return _channel.invokeMethod(_METHOD_SHAREIMAGE, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_SHAREIMAGE,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_IMAGEURI: imageUri.toString(),
|
||||
if (appName?.isNotEmpty ?? false) _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// 分享 - 音乐
|
||||
@ -289,28 +263,19 @@ class Tencent {
|
||||
assert(title != null && title.isNotEmpty);
|
||||
assert(musicUrl != null && musicUrl.isNotEmpty);
|
||||
assert(targetUrl != null && targetUrl.isNotEmpty);
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_TITLE: title,
|
||||
// _ARGUMENT_KEY_SUMMARY: summary,
|
||||
// _ARGUMENT_KEY_IMAGEURI: imageUri != null ? imageUri.toString() : null,
|
||||
_ARGUMENT_KEY_MUSICURL: musicUrl,
|
||||
_ARGUMENT_KEY_TARGETURL: targetUrl,
|
||||
// _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
};
|
||||
|
||||
/// 兼容 iOS 空安全 -> NSNull
|
||||
if (summary != null && summary.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_SUMMARY] = summary;
|
||||
}
|
||||
if (imageUri != null) {
|
||||
arguments[_ARGUMENT_KEY_IMAGEURI] = imageUri.toString();
|
||||
}
|
||||
if (appName != null && appName.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_APPNAME] = appName;
|
||||
}
|
||||
return _channel.invokeMethod(_METHOD_SHAREMUSIC, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_SHAREMUSIC,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_TITLE: title,
|
||||
if (summary?.isNotEmpty ?? false) _ARGUMENT_KEY_SUMMARY: summary,
|
||||
if (imageUri != null) _ARGUMENT_KEY_IMAGEURI: imageUri.toString(),
|
||||
_ARGUMENT_KEY_MUSICURL: musicUrl,
|
||||
_ARGUMENT_KEY_TARGETURL: targetUrl,
|
||||
if (appName?.isNotEmpty ?? false) _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// 分享 - 网页
|
||||
@ -325,26 +290,17 @@ class Tencent {
|
||||
}) {
|
||||
assert(title != null && title.isNotEmpty);
|
||||
assert(targetUrl != null && targetUrl.isNotEmpty);
|
||||
final Map<String, dynamic> arguments = <String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_TITLE: title,
|
||||
// _ARGUMENT_KEY_SUMMARY: summary,
|
||||
// _ARGUMENT_KEY_IMAGEURI: imageUri != null ? imageUri.toString() : null,
|
||||
_ARGUMENT_KEY_TARGETURL: targetUrl,
|
||||
// _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
};
|
||||
|
||||
/// 兼容 iOS 空安全 -> NSNull
|
||||
if (summary != null && summary.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_SUMMARY] = summary;
|
||||
}
|
||||
if (imageUri != null) {
|
||||
arguments[_ARGUMENT_KEY_IMAGEURI] = imageUri.toString();
|
||||
}
|
||||
if (appName != null && appName.isNotEmpty) {
|
||||
arguments[_ARGUMENT_KEY_APPNAME] = appName;
|
||||
}
|
||||
return _channel.invokeMethod(_METHOD_SHAREWEBPAGE, arguments);
|
||||
return _channel.invokeMethod(
|
||||
_METHOD_SHAREWEBPAGE,
|
||||
<String, dynamic>{
|
||||
_ARGUMENT_KEY_SCENE: scene,
|
||||
_ARGUMENT_KEY_TITLE: title,
|
||||
if (summary?.isNotEmpty ?? false) _ARGUMENT_KEY_SUMMARY: summary,
|
||||
if (imageUri != null) _ARGUMENT_KEY_IMAGEURI: imageUri.toString(),
|
||||
_ARGUMENT_KEY_TARGETURL: targetUrl,
|
||||
if (appName?.isNotEmpty ?? false) _ARGUMENT_KEY_APPNAME: appName,
|
||||
_ARGUMENT_KEY_EXTINT: extInt,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
name: tencent_kit
|
||||
description: A powerful Flutter plugin allowing developers to share or authorize with natvie android & iOS Tencent SDKs.
|
||||
version: 1.0.4
|
||||
version: 1.1.0
|
||||
# author: v7lin <v7lin@qq.com>
|
||||
homepage: https://github.com/v7lin/fake_tencent
|
||||
|
||||
environment:
|
||||
sdk: ">=2.1.0 <3.0.0"
|
||||
sdk: ">=2.3.0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
|
Reference in New Issue
Block a user