用友盟社会化组件,分享到微信和新浪微博

最近做的APP,需要分享功能,于是试了一下友盟的社会化组件。总的感觉还不错,虽然没有比直接集成官方SDK简便多少,但是后台统计的功能不错,所以最后还是用了。官网的文档说明已经挺详细了,不过章节组织得有点乱,本文总结一下

获取友盟app key

首先去友盟注册一个app key,然后下载它的SDK。这里要注意的是,SDK分为IDFA版和非IDFA版,前者需要设置一个默认的广告页,否则有可能被苹果拒绝上架,我觉得有点风险,所以最后选的是非IDFA的版本。由于目前IDFA是唯一标识设备的最准确手段,所以这个版本有可能在识别新用户时不如IDFA版准确,不过我觉得可以接受

然后友盟提供了多套组件,除了最基础的应用统计,还有社会化组件,推送组件等,我只用了它的基础SDK和社会化SDK。app key是共通的

集成微信

包括微信好友,朋友圈,收藏

首先需要去微信开放平台注册应用,然后会得到app id和app secret。我之前做过微信公众号的二次开发,对微信的这套玩法已经比较熟悉了。针对移动应用,微信开放平台提供了登陆、分享、支付等接口,我们主要用的是分享接口,这是最基础的接口,目前不需要认证开发者身份,只需要在平台上注册就可以了

得到app id和app secret之后,就可以接入了。用原生SDK和友盟SDK都差不多,iOS APP集成都离不开URL Types这一套,所以首先需要设置URL Types,填上app secret

然后就改用友盟提供的API了,不用微信原生的

#import "UMSocial.h"
#import "UMSocialWechatHandler.h"

[UMSocialData setAppKey:@"友盟的AppKey"];
[UMSocialWechatHandler setWXAppId:@"微信app id" appSecret:@"微信app secret" url:nil];

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return  [UMSocialSnsService handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return  [UMSocialSnsService handleOpenURL:url];
}

以上是需要写在AppDelegate里的代码,唯一需要注意的是,setWXAppId: appSecret: url这个方法里,url可以传nil。因为我们后续分享出去的URL都是每个页面特殊的,所以不在这里填。如果这里填了url,则会作为默认的跳转链接

-(void) socialButtonPressed
{
    NSArray *targetSns = @[UMShareToWechatSession, UMShareToWechatTimeline, UMShareToWechatFavorite];
    
    NSString *url = @"http://xxx.com/分享的消息点击后进入的url";
    NSString *title = @"自定义title";
    [UMSocialData defaultData].extConfig.wechatSessionData.url = url;
    [UMSocialData defaultData].extConfig.wechatTimelineData.url = url;
    [UMSocialData defaultData].extConfig.wechatFavoriteData.url = url;
    [UMSocialData defaultData].extConfig.wechatSessionData.title = title;
    [UMSocialData defaultData].extConfig.wechatFavoriteData.title = title;
    
    [UMSocialSnsService presentSnsIconSheetView:self appKey:nil shareText:@"内容文字" shareImage:[UIImage imageNamed:@"内容图片"] shareToSnsNames:targetSns delegate:nil];
}

这里是点击分享按钮后的代码,targetSns是分享的目标,还可以按需添加其他的社交平台,这里我只添加了微信。然后需要分别设置聊天、朋友圈、收藏的URL,朋友圈不需要设置标题,因为分享到朋友圈的消息没有标题。API里是有的,但是其实无效

另外如果用户的设备上没有装微信,那么分享界面也就不会出现微信的图标,否则的话苹果会认为是诱导下载,而拒绝上架

集成新浪微博

感觉集成新浪微博更麻烦一点,因为集成微信基本通过代码就完成了,而新浪微博需要在3个地方配置,比较零散。可能是因为我没有用新浪微博的原生SDK做过接入,所以直接用友盟的SDK感觉不是很能把握

首先当然也是要去新浪平台注册应用,拿到app key和app secret。然后配置URL Types,不过这里用的app key不是刚才我们自己去新浪申请的app key,而是友盟的app key

然后需要在新浪的管理后台配置OAuth的回调地址,根据友盟的文档,把安全域名配置为sns.whalecloud.com,回调地址配置成http://sns.whalecloud.com/sina2/callback,这也是让我觉得比较奇怪的地方,按理说应该是配置成我们应用自己的地址才比较合理。在新浪的文档里找了半天,也没看到这个地址需要实现什么逻辑,就先按友盟介绍的来吧

然后是代码:

#import "UMSocial.h"
#import "UMSocialSinaHandler.h"

[UMSocialData setAppKey:@"xxxx"];
[UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return  [UMSocialSnsService handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return  [UMSocialSnsService handleOpenURL:url];
}

模式和前面接入微信相当类似,也看出使用第三方组件的好处,至少handleOpenURL和openURL不需要写两遍了

然后是分享的代码:

NSArray *targetSns = @[UMShareToSina];
    
[UMSocialSnsService presentSnsIconSheetView:self appKey:nil shareText:@"测试文字\nhttp://www.baidu.com" shareImage:[UIImage imageNamed:@"image_placeholder"] shareToSnsNames:targetSns delegate:nil];

这里的区别是不需要设置url和title了,因为分享到微博的模式不同于微信,没有显示title和url的地方,这个是平台差异,不是使用友盟的原因,即使用新浪原生的SDK,也是一样做不到。所以我希望在分享的内容里添加一个链接,就需要直接写在shareText里

经过上面的配置,就可以把内容分享到新浪微博了。这里如果用户设备上有微博,就会使用SSO直接分享;如果没有安装,则会跳转到web页面使用OAuth授权。这主要是因为新浪微博为第三方应用提供了OAuth授权的方式,而微信现在貌似只对公众号提供了OAuth接入,移动应用还是只能通过应用跳转

但是现在有个问题,我发现我前面在新浪申请的app key和app secret从头到尾就没用过,这明显是不合理的。果然分享出去的微博,来源都是“友盟社会化组件”,后来找了一圈,发现还需要在友盟的后台配置一下自己的app key和app secret,然后就OK了

高级功能

除了前面的最基本的分享,还可以自定义分享页面的样式(基础的方式是友盟已经提供了XIB和弹出方式),也可以调用更底层的直接分享接口(无页面),另外还有一些delegate方法,有需要的话可以自行实现


你可能感兴趣的:(新浪微博)