前言:我把umeng分享集成分了三部分,1.导入umeng框架 2.配置各平台URL Scheme 3.代码实现
一、导入umeng框架
1.1 通过Cocoapods集成(以QQ、微博、微信为例)
target 'UMSocialDemo' do
# U-Share SDK UI模块(分享面板,建议添加)
pod ‘UMengUShare/UI’
# 集成新浪微博
pod ‘UMengUShare/Social/Sina'
# 集成微信
pod ‘UMengUShare/Social/WeChat'
# 集成QQ
pod ‘UMengUShare/Social/QQ'
end
新增加Cocoapods集成命令U-Share时直接使用pod update更新,不可加入--no-repo-update参数,需直接更新线上Cocoapods库。
二、U-Share SDK平台配置
**平台配置的时候需要第三方appKey和appSecret等信息,可参考第三方账号申请及绑定申请所需的平台账号
**URL Scheme是通过系统找到并跳转对应app的一类设置,通过向项目中的info.plist文件中加入URL types可使用第三方平台所注册的appkey信息向系统注册你的app,当跳转到第三方应用授权或分享后,可直接跳转回你的app。
1、设置白名单
2.设置URL Scheme
三、代码实现
3.1.1 初始化U-Share及第三方平台
**app启动后进行U-Share和第三方平台的初始化工作 以下代码将所有平台初始化示例放出,开发者根据平台需要选取相应代码,并替换为所属注册的appKey和appSecret。在AppDelegate.m中设置如下代码
#import <UMSocialCore/UMSocialCore.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//打开调试日志
[[UMSocialManager defaultManager] openLog:YES];
//设置友盟appkey
[[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"];
// 获取友盟social版本号
//NSLog(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]);
//设置微信的appKey和appSecret
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"];
//设置分享到QQ互联的appKey和appSecret
// U-Share SDK为了兼容大部分平台命名,统一用appKey和appSecret进行参数设置,而QQ平台仅需将appID作为U-Share的appKey参数传进即可。
//***把QQ的appKey设置成qq平台拿到的appid
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"100424468" appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];
//设置新浪的appKey和appSecret
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"http://sns.whalecloud.com/sina2/callback"];
// 如果不想显示平台下的某些类型,可用以下接口设置
// [[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite),@(UMSocialPlatformType_YixinTimeLine),@(UMSocialPlatformType_LaiWangTimeLine),@(UMSocialPlatformType_Qzone)]];
return YES;
}
3.1.2 设置系统回调
// 支持所有iOS系统
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
if (!result) {
// 其他如支付等SDK的回调
}
return result;
}
3.1.3点击分享执行的代码
- (void)share
{
//此方法是为了显示面板上平台顺序
[UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_Qzone),@(UMSocialPlatformType_WechatSession),@(UMSocialPlatformType_WechatTimeLine)]];
__weak typeof(self) weakSelf = self;
//此方法是点击某个平台的回调
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
//根据具体情况调用不同的方法
[weakSelf shareWebPageToPlatformType:platformType];
}];
}
//分享文本
- (void)shareTextToPlatformType:(UMSocialPlatformType)platformType
{
//创建分享消息对象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//设置文本
messageObject.text = @"社会化组件UShare将各大社交平台接入您的应用,快速武装App。";
//调用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
[self alertWithError:error];
}];
}
//网页分享
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
{
//创建分享消息对象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
UIImage *shareImage = [UIImage imageNamed:@"Icon-60"];
UILabel *label = (UILabel *)self.navigationItem.titleView;
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:label.text descr:self.request.URL.absoluteString thumImage:shareImage];
//设置网页地址
shareObject.webpageUrl = self.request.URL.absoluteString;
//分享消息对象设置分享内容对象
messageObject.shareObject = shareObject;
//调用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
UMSocialLogInfo(@"************Share fail with error %@*********",error);
}else{
if ([data isKindOfClass:[UMSocialShareResponse class]]) {
UMSocialShareResponse *resp = data;
//分享结果消息
UMSocialLogInfo(@"response message is %@",resp.message);
//第三方原始返回的数据
UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
}else{
UMSocialLogInfo(@"response data is %@",data);
}
}
[self alertWithError:error];
}];
}
//分享结果
- (void)alertWithError:(NSError *)error
{
NSString *result = nil;
if (!error) {
result = [NSString stringWithFormat:@"分享成功"];
}
else{
if (error) {
switch (error.code) {
case 2000:
case 2001:
case 2003:
case 2007:
result = @"分享失败";
break;
case 2002:
result = @"授权失败";
break;
case 2004:
result = @"请求用户信息失败";
break;
case 2005:
result = @"分享内容为空";
break;
case 2006:
result = @"分享内容不支持";
break;
case 2008:
result = @"应用未安装";
break;
case 2009:
result = @"取消操作";
break;
case 2010:
result = @"网络异常";
break;
case 2011:
result = @"第三方错误";
break;
default:
break;
}
}
else{
result = [NSString stringWithFormat:@"分享失败"];
}
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享"
message:result
delegate:nil
cancelButtonTitle:NSLocalizedString(@"确定", @"确定")
otherButtonTitles:nil];
[alert show];
}