友盟分享简单集成和常见问题解决

在iOS开发中,当我们需要集成多个平台分享时,多数情况下我们会通过友盟,ShareSDK等第三方的分享平台来加快开发进度,关于友盟分享的集成方法在其官网上以及有详细指导,这里简单介绍下流程,文章后面分享一些在集成友盟分享时遇到的问题和解决方法。

导入框架

  1. 使用CocoaPods集成
    pod 'UMengSocialCOM', '~> 5.2.1'
    pod install

  2. 手动下载时,将下面文件夹导入到工程路径下。附:官方sdk下载页面
    UMSocial_Sdk_x.x.x 文件夹
    UMSocial_Sdk_Extra_Frameworks 文件夹

添加系统需要的framework

  1. target->Bulid Phases->Linked Binary and Libraries中增加以下框架:
    Security.framework
    libiconv.tbd
    SystemConfiguration.framework
    CoreGraphics.Framework
    libsqlite3.tbd
    CoreTelephony.framework
    libstdc++.tbd
    libz.tbd
    ImageIO.framework

  2. 在Bulid Settings---other linker flags增加
    -ObjC

设置友盟appkey

在友盟官网上注册账号后,在首页上选择“友盟分享”后,进入友盟分享的管理页,为自己的应用注册一个appkey。


得到appkey后,在AppDelegate中的-didFinishLaunchingWithOptions使用:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[UMSocialData setAppKey:@"上图中得到的appkey"];
}

配置第三方APPID

在需要分享的平台的开发者官网上为自己的应用注册信息,并拿到相应的使用秘钥
QQ申请地址: http://open.qq.com
微信申请地址:https://open.weixin.qq.com
新浪申请地址:http://open.weibo.com
将下面的方法同样写在AppDelegate的-didFinishLaunchingWithOptions方法中

    //设置微信AppId、appSecret,分享url
    [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];
    //设置手机QQ 的AppId,Appkey,和分享URL,需要#import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];
    //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。需要 #import "UMSocialSinaSSOHandler.h"
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"3921700954" secret:@"04b48b094faeb16683c32669824ebdad" RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

配置系统回调

在APPdelegate.m中增加下面的系统回调配置,注意如果同时使用微信支付、支付宝等其他需要改写回调代理的SDK,请在if分支下做区分,否则会影响 分享、登录的回调

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    BOOL result = [UMSocialSnsService handleOpenURL:url];
         if (result == FALSE) {
         //调用其他SDK,例如支付宝SDK等
         }
         return result;
    }

配置URL scheme

target->Info->URL Types 中添加 URL Schemes,根据分享需要选择性添加,格式如下:

|平台|url scheme设置格式|例子
|---|--|
|新浪|"wb"+"新浪appkey"|例如:wb126663232|
|微信|"微信应用appId"|例如:wxd9a39c7122aa6516|
|QQ、QQ空间|1. “QQ”+十六进制appId(不足8位前面补0)|例如:QQ05FC5B14|
||2. “tencent“+appId,|:例如tencent100424468

调用默认风格进行分享

如果想快速集成的话,可以直接使用友盟内置分享UI界面

    [UMSocialData defaultData].extConfig.title = @"分享的title";
    [UMSocialData defaultData].extConfig.qqData.url = @"http://baidu.com";
    [UMSocialSnsService presentSnsIconSheetView:self
                                 appKey:@"507fcab25270157b37000010"
                              shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
                             shareImage:[UIImage imageNamed:@"icon"]
                        shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UM        ShareToSina,UMShareToQQ,UMShareToQzone]
                               delegate:self]; 

分享后回调方法:

    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
        //根据`responseCode`得到发送结果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的平台名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
    }

问题及解决方法

  • 解决控制台"This app is not allowed to query for scheme xxxx"问题

1 . info.plist -> NSApp Transport Security下新增(NS前缀可以省略)
NSAllowsArbitraryLoads : YES
2 . Info.plist -> LSApplicationQueriesSchemes (没有就创建,Array类型),将所有的xxxx增加到数组中:


  • 控制台"The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."错误

以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求。
比较简单的方法是在info.plist->NSAppTransportSecurity下增加
NSAllowsArbitraryLoads : YES
指定所有HTTP连接都可正常请求

  • 解决AppStore上架问题

Additionally, we found that your app requires the installation of another app before it can be used, which is not in compliance with the App Store Review Guidelines. Apps should be able to run on launch, without requiring additional applications to be installed.
Specifically, we were required to install WeChat/QQ before we could use the sharing features in your app.
Please revise your app so that a user can use it upon launch. If your app requires authentication before use, please use a method that can authenticate users from within your app.
使用微信分享、登录必须安装微信客户端,QQ登录、QQ空间分享过程中必须安装手机QQ客户端,在未安装客户端的设备上测试会提示下载,这是不符合苹果审核规则的。所以在调用前我们先调用微信SDK或QQ互联SDK的方法检测是否安装微信/QQ客户端
判断方法在下面两个头文件内:
#import "WXApi.h"
#import <TencentOpenAPI/QQApiInterface.h>
创建一个可变数组存放可分享的平台
//弹出前先检测平台是否安装
NSMutableArray *platformArray = [[NSMutableArray alloc] init];
if ([WXApi isWXAppInstalled]) {
[platformArray addObject:UMShareToWechatTimeline];
[platformArray addObject:UMShareToWechatSession];
}
if ([QQApiInterface isQQInstalled]) {
[platformArray addObject:UMShareToQzone];
[platformArray addObject:UMShareToQQ];
}
//弹出分享平台选择界面
[UMSocialSnsService presentSnsIconSheetView:self
appKey:@"507fcab25270157b37000010"
shareText:@"友盟社会化分享让您快速实现分享等社会化功能,http://umeng.com/social"
shareImage:[UIImage imageNamed:@"icon"]
shareToSnsNames:platformArray//使用上面的变量
delegate:self];

  • 模拟器中运行报错Undefined symbols for architecture i386

由于最新版本的QQ sdk_v_3.1.0中去除了i386架构的支持因此,后续凡使用了新版友盟的,都只要在真机运行通过即可

附:友盟分享论坛-开发者社区FAQ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 前言 友盟能实现分享功能,友盟+申请第三方账号的目的: 进行分享、授权操作需要在第三方平台创建应用并提交审核,友盟...
    CoderZb阅读 9,690评论 8 60
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,046评论 25 707
  • 你是不是觉得身边有一些人,看似无所事事吊儿郎仿佛也在虚度年华,但你不知道,他可能在你不知道的时候为自己的梦想努力付...
    孙小山阅读 1,694评论 2 3
  • 问:冰为什么会融化呢? 答:因为太阳越来越强,冰很快就融化了。 问:围巾为什么是绿色的? 答:因为这表示环保。 问...
    陆_79f8阅读 231评论 0 2
  • 20170821 亲爱的自己,今天老公回单位了;下午又送儿子回学校,儿子在外租了房子住。由于之前儿子和我交流过,我...
    湛蓝语语阅读 101评论 0 0