友盟集成(九) —— UShare模块之UShare常见问题 (六)

版本记录

版本号 时间
V1.0 2018.04.05

前言

相信很多人用过友盟,包括友盟的第三方登录、分享以及统计。这里我们就分几个模块进行详细的说明 —— 移动统计(U - App)、网站统计(U - Web)、消息推送(U - Push)、社会化分享(U - Share)、游戏统计(U - Game)、互联网运营数据服务(Dplus) - 多维度、一站式、精细化数据管理服务。感兴趣的可以看上面几篇。
1. 友盟集成(一) —— UShare模块之快速集成(一)
2. 友盟集成(二) —— UShare模块之快速集成(二)
3. 友盟集成(三) —— UShare模块之第三方登录(一)
4. 友盟集成(四) —— UShare模块之进阶说明之第三方平台SDK说明(一)
5. 友盟集成(五) —— UShare模块之进阶说明之分享到第三方平台(二)
6. 友盟集成(六) —— UShare模块之进阶说明之分享面板UI(三)
7. 友盟集成(七) —— UShare模块之进阶说明之自定义平台(四)
8. 友盟集成(八) —— UShare模块之进阶说明之U-Share API说明(五)

UShare常见问题

1. U-Share返回错误码

//平台的失败错误码
/**
 *  U-Share返回错误类型
 */
typedef NS_ENUM(NSInteger, UMSocialPlatformErrorType) {
    UMSocialPlatformErrorType_Unknow            = 2000,            // 未知错误
    UMSocialPlatformErrorType_NotSupport        = 2001,            // 不支持(url scheme 没配置,或者没有配置-ObjC, 或则SDK版本不支持或则客户端版本不支持)
    UMSocialPlatformErrorType_AuthorizeFailed   = 2002,            // 授权失败
    UMSocialPlatformErrorType_ShareFailed       = 2003,            // 分享失败
    UMSocialPlatformErrorType_RequestForUserProfileFailed = 2004,  // 请求用户信息失败
    UMSocialPlatformErrorType_ShareDataNil      = 2005,             // 分享内容为空
    UMSocialPlatformErrorType_ShareDataTypeIllegal = 2006,          // 分享内容不支持
    UMSocialPlatformErrorType_CheckUrlSchemaFail = 2007,            // schemaurl fail
    UMSocialPlatformErrorType_NotInstall        = 2008,             // 应用未安装
    UMSocialPlatformErrorType_Cancel            = 2009,             // 取消操作
    UMSocialPlatformErrorType_NotNetWork        = 2010,             // 网络异常
    UMSocialPlatformErrorType_SourceError       = 2011,             // 第三方错误

    UMSocialPlatformErrorType_ProtocolNotOverride = 2013,   // 对应的    UMSocialPlatformProvider的方法没有实现
    UMSocialPlatformErrorType_NotUsingHttps      = 2014,   // 没有用https的请求,@see UMSocialGlobal isUsingHttpsWhenShareContent

};

2. 集成SDK问题

用了U-Share v5.x版本,现在加入6.x编译链接报错

U-Share SDK 5.x和6.x版本不相兼容,v6.x是完全重构的一个版本,升级到6.x时请完全移除v5.x或更早版本。

分享面板很多平台没显示

这是U-Share SDK内部处理,对于模拟器以及在设备上未安装或不支持授权/分享的平台应用进行了隐藏,以增强分享体验及解决审核App时可能被拒的问题。

3. 授权/分享跳转与回调问题

授权或分享未跳到目标App

可能在工程中配置iOS9以上白名单缺少对应平台参数,参考配置SSO白名单。

failed for URL: ""weibosdk://"" - error:

类似还有微信、QQ等需要打开相应app的都会有这样的log,在模拟器上可能出现此log,因为没安装对应app,此条日志可以忽略。 而如果出现error: "This app is not allowed to query for scheme xxx",说明白名单没有配置,参考上一个问题。

在目标App授权或分享后未跳转回原App

未配置URL Types,参考添加URL Types。

授权或分享结束后未回调数据

检查系统回调函数,参考设置系统回调。

跳转收到UIKeyboardWillShow消息

在分享到第三方平台,如QQ、微信,在某些情况下可能会收到UIKeyboardWillShowNotification消息,U-Share SDK内部并无此消息发出。 发生的情况可能在跳转到第三方平台编辑页面弹出键盘后或跳回App后收到,可参考以下两种方式解决:

  • viewDidDisappear中移除此消息的注册。
  • 用下列代码过滤非本控件触发的消息。
- (void)keyboardWillShowNotification:(NSNotification *)note
{
    if (!myTextField.isFirstResponder) {
        return;
    }
    // code
}

4. 苹果审核(ATS)及HTTPS

HTTP图片发送失败

由于ATS的原因,所有HTTP链接在SDK内都被禁止,并提示错误告知非https图片不可分享,请使用https图片,保证ATS环境下可以顺畅的进行分享操作。分享图片方式如下: 1. 分享图片仅适用本地图片加载,如UIImage或NSData数据传输。 2. 如需使用网络图片,确保URL为HTTPS图片链接,以便于U-Share SDK下载并进行分享,否则会分享失败。

关于ATS(审核时强制应用支持HTTPS)的问答

问:友盟分享和第三方登录的SDK,现在要升级HTTPS,是否所有的都需要必须换成最新的sdk才可以?如果不升级而用原来的SDK,可以设置吗?HTTPS协议与SDK的版本号有没有关系? 答:这可能是多数开发者的疑惑,ATS的支持需要本地SDK将访问地址由http调整为https前缀的链接才可以,无法设置,所以从U-Share 6.1开始已经支持全部HTTPS访问。 但目前有一个例外新浪微博的官方SDK还未全部支持ATS,在通过网页进行授权依然是HTTP请求导致页面加载失败,请关注官方U-Share iOS SDK后续会保持跟进。

  • 上线的应用是否有影响
    在AppStore的应用不会有影响,也不会下架。这个变化是针对新提交审核的,也就是说,只要更新应用,就需要支持ATS。

  • 在苹果执行ATS后友盟分享SDK4.x版和5.x版本分享是否可用
    跟上面的问题一样,只要在线上的应用均不会受到影响。但如果需要更新应用提交审核,则需要更新SDK到6.1以上版本,即现在全新的U-Share SDK已支持ATS。

  • 微博SDK设置redirectURL为HTTP的,是否影响审核,以及安卓是否需要同步修改
    官方建议修改为前缀是https的redirectURL,并且http和https前缀的redirectURL互相兼容,不会导致不匹配而授权失败的问题。由于微博后台的设置无需修改,安卓客户端也不会有影响。

  • 微信、新浪微博和QQ头像是HTTP URL
    目前第三方平台返回的头像链接依然是HTTP地址,不过U-Share SDK已经做了兼容处理,升级到6.1.2以上版本SDK使用,开发者无需担心获取头像因为ATS的原因而失败。

5. 分享参数问题

网页类型发送失败

发送网页link card形式的分享,需要设置缩略图,如demo中的示例:

UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"分享标题" descr:@"分享内容描述" thumImage:[UIImage imageNamed:@"icon"]];

其中需要设定thumImage。

6. 分享面板UI

更新6.1后UI编译错误

由于6.1版开始更新了全新的分享面板,所以导入形式也略有改变

  • 导入文件
##import "UMSocialUIManager.h"

改为

##import 
  • 回调block
 [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMShareMenuSelectionView *shareSelectionView, UMSocialPlatformType platformType) {

    }];

接口没变,回调参数调整为

    [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
    }];

分享面板无法弹出

由于 1. 创建Xcode项目会默认添加Main.storyboard作为Main Interface(General - Deployment Info),也就是项目的主Window。 2. 如果没使用Main.storyboard而又另外在AppDelegate中创建了UIWindow对象,如

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]

如果项目中同时出现Main Interface以及代码创建UIWindow会导致分享面板无法正常弹出,解决方法是移除其一即可。如果移除了Main.storyboard,需要clean工程后再重新运行。

7. 更新Cocoapods问题

找不到UMengUShare

如果通过Cocoapods集成U-Share SDK(Cocoapods集成)出现更新失败或查找失败,如:

Unable to find a pod with name matching 'UMengUShare/Social/Wechat'

原因可能是未更新Cocoapods库,使用pod update进行更新远端数据库,切记不要使用--no-repo-update参数,更新Cocoapods库时间较长,请耐心等待。

从4.x或5.x版本升级U-Share 6.0报错library not found for xxx

由于老版本通过cocoapods集成下载接入全量的平台,包括APOpenSDK、facebook、twitter等。在新版U-Share通过cocoapods集成可以灵活的单选平台,没有加入Podfile配置文件的不会下载。 可以到项目 - Build Setting - Other linker flag 查看是否有多余的库依赖,确认后删除即可。

cocoapods library not found for -lPods

新版cocoapods1.0链接库名称为libPods-[target_name].a,不再是libPods.a,删除libPods.a即可。

报错"not used in any concrete target"

Cocoapods1.0版本语法问题,需改为

target '工程target名称' do
    pod ‘cocoapods库名'
end

以上工程target名称需改为开发者工程内对应的target名。

通过cocoapods集成Linkedin领英

linkedin会和Cocoapods产生链接时冲突

duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods

可将Pod中的PodsDummy_Pods类名修改为_PodsDummy_Podsxx

8. QQ

分享网页类型失败source code 5

检查url中是否含有中文字符,将中文部分进行url转码后可正常分享。

9. 微博

微博授权页显示sso package error

微博SSO错误是项目的bundle id和在微博平台bundle id设置的不一致导致的,必须保证字符完全匹配。

提示redirect_uri_mismatch

项目中设置的redirectURL和授权Request传递的回调地址(WBAuthorizeRequest.redirectURI-微博后台设置)不一致导致的,必须保证字符完全匹配。 如

[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954"  appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"http://sns.whalecloud.com/sina2/callback"];

以上redirectURL必须和微博后台设置一致。

弹出授权窗口后瞬间消失

两个可能 1. bundle id不一致导致 2. 检查info.plist文件里有没添加加URL Types,在URL Schemes里填上wb+APPKEY

授权后没有返回应用

检查info.plist里设置的URL Scheme是否正确,需要是wb+appkey的形式。

未安装微博客户端分享音乐、视频的显示问题

目前微博分享不支持在未安装微博客户端时分享音乐、视频类型的内容。已安装客户端可在微博客户端编辑页正常显示,发送后显示状态可参考上面的微博 LinkCard问题。

微博(完整版)webview回调的崩溃

未安装新浪微博客户端时会弹出Webview进行登录和分享,之后会回调至以下函数:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

如果用户没有重载此函数的话,会导致微博SDK通过Webview的回调而崩溃。 开发者需重载此方法接受系统回调。

10. 支付宝

支付宝返回“-4”“鉴权失败”

检查bundle id是否和支付宝后台配置的bundle id一致。

后记

本篇主要讲述了UShare模块之UShare常见问题,感兴趣的给个赞或者关注~~~

友盟集成(九) —— UShare模块之UShare常见问题 (六)_第1张图片

你可能感兴趣的:(友盟集成(九) —— UShare模块之UShare常见问题 (六))