什么是Trochilus
Trochilus是iOS平台下轻量级分享框架,集分享、登录、支付于一体。
Trochilus优势
1、无需导入一大堆系统库(framework、tbd),仅需导入WebKit.framework网页授权用到。
2、无需导入社交平台SDK(QQSDK、微信SDK、微博SDK)等。
3、API简单易用,仿ShareSDK API。
4、各个平台回调Trochilus内部自动处理。
5、开源、开源、开源。
初始化Trochilus
打开AppDelegate.m导入头文件
#import "Trochilus.h"
在- (BOOL)application: didFinishLaunchingWithOptions:方法中调用registerActivePlatforms方法来初始化第三方平台
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//平台注册
NSArray *platforems = @[@(TPlatformTypeQQ),
@(TPlatformTypeWechat),
@(TPlatformTypeSinaWeibo)];
[Trochilus registerActivePlatforms:platforems onConfiguration:^(TPlatformType platformType, NSMutableDictionary *appInfo) {
switch (platformType) {
case TPlatformTypeQQ:
[appInfo TSetupQQByAppId:@"100371282"
appKey:@"aed9b0303e3ed1e27bae87c33761161d"
authType:TAuthTypeBoth
useTIM:NO];
break;
case TPlatformTypeWechat:
[appInfo TSetupWeChatByAppId:@"wx4868b35061f87885"
appSecret:@"64020361b8ec4c99936c0e3999a9f249"];
break;
case TPlatformTypeSinaWeibo:
[appInfo TSetupSinaWeiboByAppKey:@"2586911134"
appSecret:@"fa8d0464da4cf32585892621e48ea3c4"
redirectUri:@"http://www.wangquanwei.com"
authType:TAuthTypeBoth];
break;
default:
break;
}
}];
return YES;
}
(注意:每一个case对应一个break不要忘记填写,不然很可能有不必要的错误。)
分享
添加如下代码,分享之后的效果需要去对应的分享平台上观看,首先要构造分享参数,然后再根据每个平台的方法定制自己想要分享的不同的分享内容。
NSMutableDictionary * parameters = [NSMutableDictionary dictionary];
//QQ好友分享
[parameters TSetupQQParamsByText:@"222"
title:nil
url:nil
audioFlashURL:nil
videoFlashURL:nil
thumbImage:nil
images:nil
type:self.type
forPlatformSubType:TPlatformSubTypeQQFriend];
//微信好友分享
[parameters TSetupWeChatParamsByText:@"222"
title:nil
url:nil
thumbImage:nil
image:nil
musicFileURL:nil
extInfo:nil
fileData:nil
emoticonData:nil
sourceFileExtension:nil
sourceFileData:nil
type:TContentTypeText
forPlatformSubType:TPlatformSubTypeWechatSession];
//微博分享
[parameters TSetupSinaWeiboShareParamsByText:@"222 http://www.wangquanwei.com/"
title:nil
image:nil
url:nil
latitude:0
longitude:0
objectID:nil
type:TContentTypeText];
//分享
[Trochilus share:{这里填分享平台}
parameters:parameters
onStateChanged:^(TResponseState state, NSDictionary *userData, NSError *error) {
switch (state) {
case TResponseStateSuccess: {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"分享成功" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
break;
case TResponseStateFail: {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:@"分享失败\n%@",error] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
break;
case TResponseStateCancel: {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"用户取消" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
break;
default:
break;
}
}];
更多可以参考文件 (Trochilus / Category / NSMutableDictionary+Share)中的方法。
登录
把如下代码复制并粘贴到你要登录的位置,并且修改相应的参数即可。
这里以QQ登陆为例
(其他的平台也一样的处理,修改下登陆方法里authorize的平台类型参数:微信登录-> TPlatformTypeWechat,新浪微博登录->TPlatformTypeSinaWeibo。
[Trochilus authorize:TPlatformTypeQQ settings:nil onStateChanged:^(TResponseState state, TUser *user, NSError *error) {
}];
支付
首先要构造支付参数,然后再根据每个平台调用不同的方法。
支付涉及到敏感数据,参数全隐去。
//微信支付
NSMutableDictionary * wechatPay = [NSMutableDictionary dictionary];
[wechatPay payWithWechatPartnerId:{partnerId}
prepayId:{prepayId}
nonceStr:{nonceStr}
timeStamp:@"1499752264"
package:@"Sign=WXPay" //iOS微信支付package只能为Sign=WXPay
sign:{sign}];
[Trochilus payToWechatParameters:wechatPay onStateChanged:^(TResponseState state, TUser *user, NSError *error) {
}];
//支付宝支付
NSString * urlScheme = {urlScheme};
NSString * orderString = {由服务器返回构造好的支付字符串};
[Trochilus payToAliPayUrlScheme:urlScheme orderString:orderString onStateChanged:^(TResponseState state, TUser *user, NSError *error) {
}];
适配iOS9+系统
1、http
问题:
在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据。对Trochilus来说,具体表现可能是,无法授权、分享、获取用户信息等。
解决方法:
在项目的info.plist中添加一个Key:App Transport Security Settings,类型为字典类型。然后给它添加一个Key:Allow Arbitrary Loads,类型为Boolean类型,值为YES。
2、白名单
问题:
在iOS 9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台Scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。因此要支持客户端的分享和授权等,需要配置Scheme名单。
解决方法:
在项目的info.plist中添加一LSApplicationQueriesSchemes,类型为Array。然后给它添加一个需要支持的项目,类型为字符串类型。
LSApplicationQueriesSchemes
wechat
weixin
sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5
mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
alipay
alipayshare
URL Scheme
别忘了配置URL Scheme否则将无法返回客户端。
具体规则请看各个平台文档。
感谢
感谢ShareSDK,API模仿ShareSDK做的。
下载
Trochilus