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

作者: 苹果防腐指南 | 来源:发表于2016-07-14 23:50 被阅读5190次

在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

相关文章

  • Android-->友盟分享/登录快速集成库

    友盟分享/登录快速集成库 友盟分享快速集成库 本库基于友盟6.4.4的分享模块版本开发. 暂时只集成了, QQ和微...

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

    在iOS开发中,当我们需要集成多个平台分享时,多数情况下我们会通过友盟,ShareSDK等第三方的分享平台来加快开...

  • Could not find a storyboard name

    今天集成了友盟分享,但是分享面板一直出不来,然后查看了友盟的常见问题文档 根据友盟的文档,把Main.storyb...

  • 友盟分享总结 coder_hong

    友盟分享 友盟官网集成文档 首先注册友盟账号 SDK下载Snip20160616_2.png 友盟个人中心中创建一...

  • Android 友盟分享的问题解决

    现在做的项目中集成了友盟分享,产品要求集成微信、朋友圈、QQ、QQ空间、短信这几个分享平台。按照友盟的文档集成一切...

  • iOS友盟分享快速集成

    下载友盟分享开发文档 【注】以下只集成QQ和WeChat 1. 注册账号获取相应配置的信息 友盟+ ---- 获取...

  • iOS分享---使用友盟分享(自定义分享面板)

    在新的项目中,需要实现分享功能,比较后接入友盟分享。友盟分享的使用文档以及常见问题都非常的详细,接入也较为简单。只...

  • iOS 友盟推送--关键点/核心点

    |:-| totem iOS集成友盟推送 1.iOS集成“友盟推送”后,友盟服务响应的deviceToken = ...

  • Android uemgn分享回调。细节

    一、友盟QQ分享不走回调方法 集成友盟社会化分享后,除了QQ、QQZone以外,其他分享都能正常显示分享成功、取消...

  • 友盟分享集成

    在本app打开其他app的时候,会调用一个共享类的对象方法是 如果返回yes,系统允许打开,才能分享调用成功,进行...

网友评论

  • Frey丶:请问下,我按照官方文档cocoapods只集成qq.新浪.微信,为什么集成后找不到UMSocialData这个类和UMSocialSinaSSOHandler这个类? 是我少集成什么东东了?
  • 棍武中原:There is no any valid platform
    集成友盟后。点击项目中的分享按钮,我的提示这个,求楼主告之怎么回事,如解答必重谢
  • NSL_zerom:出现这个There is no any valid platform,有人知道是怎么回事么
    pinksnow:@NSL_zerom 同样遇到这样的问题,我的问题是在iOS10及以上可以分享,10以下便出现这个错误
  • iYeso:好
  • B_C_H:你好5.2.1版本是不是只支持iOS 8.2以上?
  • 超_iOS:添加系统需要的framework后。,马上就报错了。貌似和腾讯的某个类有关。想请教
    超_iOS: @苹果防腐指南 Undefined symbols for architecture x86_64:
    "l_OBJC_PROTOCOL_$_TencentApiInterfaceDelegate", referenced from:
    l_OBJC_$_PROTOCOL_REFS_TencentSessionDelegate in IMALoginViewController.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    苹果防腐指南:@李二超 是因为关于i386的编译问题?

本文标题:友盟分享简单集成和常见问题解决

本文链接:https://www.haomeiwen.com/subject/tpxyjttx.html