iOS10之友盟分享6.8.0

之前适配iOS9 是友盟分享5.0.1版本,请移步:友盟分享5.0.1

更新使用的友盟分享6.0.3版本至目前最新版本6.0.3来适配 iOS10!这里以微信和 QQ 分享举栗子~

友盟官网

iOS10之友盟分享6.8.0_第1张图片

第一步: 下载最新的SDK

下载SDK链接,http://dev.umeng.com/social/ios/sdk-download

第二步:下载目录简介

  1. Document - U-Share SDK文档
  2. UMSocialDemo - U-Share SDK Demo(如点选下载)
  3. UMSocial - U-Share SDK核心目录
    UMSocialSDK - U-Share SDK核心framework
    UMSocialUI - U-Share 分享UI资源、分享面板framework
    SocialLibraries - 所选择下载的第三方平台SDK及U-Share链接库
    UMSocialSDKPlugin - SDK需要的依赖插件

第三步:加入下载解压后的SDK

3.1 添加到工程所需

iOS10之友盟分享6.8.0_第2张图片
将U-Share SDK添加到工程

3.2 添加项目配置

在Other Linker Flags加入-ObjC


iOS10之友盟分享6.8.0_第3张图片

3.3 加入依赖系统库

iOS10之友盟分享6.8.0_第4张图片

3.4 加入以下系统库

libsqlite3.tbd
CoreGraphics.framework

3.5 添加平台相应的依赖库

根据集成的不同平台加入相关的依赖库,未列出平台则不用添加 添加方式:选中项目Target -> Linked Frameworks and Libraries列表中添加, 目前有精简版,有些可不用添加,具体参考官方文档.

微信(完整版)-精简版无需添加以下依赖库 :

SystemConfiguration.framework
CoreTelephony.framework
libsqlite3.tbd
libc++.tbd
libz.tbd 

QQ/QZone/TIM(完整版)-精简版无需添加以下依赖库:

SystemConfiguration.framework
libc++.tbd

第四步: 配置各平台URL Scheme

4.1 添加URL Types

URL Scheme是通过系统找到并跳转对应app的一类设置,通过向项目中的info.plist文件中加入URL types可使用第三方平台所注册的appkey信息向系统注册你的app,当跳转到第三方应用授权或分享后,可直接跳转回你的app。

添加URL Types,以下三种都可进行设置:

iOS10之友盟分享6.8.0_第5张图片
通过工程设置面板
iOS10之友盟分享6.8.0_第6张图片
通过info.plist文件编辑
iOS10之友盟分享6.8.0_第7张图片
直接编辑info.plist中XML代码

我一般习惯都是选择第一种通过工程设置面板.

4.2 配置第三方平台URL Scheme

  • QQ需增加两个URL Scheme:
  • "tencent"+腾讯QQ互联应用appID
    “QQ”+腾讯QQ互联应用appID转换成十六进制(不足8位前面补0)
    URL Scheme举例 如appID为:100424468
  • tencent100424468
    QQ05fc5b14
    说明:100424468转十六进制为5fc5b14,因不足8位向前补0,结果为05fc5b14,加"QQ"前缀QQ05fc5b14
  • 微信仅需一个URL Scheme:
    直接设置微信appkey即可,如wxdc1e388c3822c80b

这里的用友盟测试账号测试,请勿直接使用上述示例参数,多个App使用同样的URL Schemes参数会导致从第三方App跳转回原App时混乱!


iOS10之友盟分享6.8.0_第8张图片

第五步:适配iOS9/10系统

iOS9系统后Apple对HTTP请求及访问外部应用做了更加严格的要求,包括HTTP白名单、跳转第三方应用白名单等,具体设置第三方平台参数请参照适配iOS9/10系统。
http://dev.umeng.com/social/ios/ios9

在新发布的iOS10系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理:

5.1. HTTPS传输安全

以iOS10 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求。目前可用如下两种方式保持用HTTP进行网络连接:

在info.plist中加入安全域名白名单(右键info.plist用source code打开):


iOS10之友盟分享6.8.0_第9张图片

5.2. 应用跳转(SSO等)

如果你的应用使用了如SSO授权登录或跳转分享功能,在iOS9/10下就需要增加一个可跳转的白名单,指定对应跳转App的URL Scheme,否则将在第三方平台判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。
同样在info.plist增加:


iOS10之友盟分享6.8.0_第10张图片

第六步:调用U-Share SDK(具体实现)

6.1 初始化U-Share及第三方平台

app启动后进行U-Share和第三方平台的初始化工作
以下代码是拿微信和QQ平台初始化放出,开发者根据平台需要选取相应代码,并替换为所属注册的appKey和appSecret。 至于其他平台举一反三请看官方文档.

在AppDelegate.m中设置如下代码

将 #import  
改成 #import 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.window switchRootViewController];
    [self.window makeKeyAndVisible];
    
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 8.0) { // iOS8+ IconBadge需授权
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
    
    // 使用友盟
    [self useUMengSocialData];
    
    
    return YES;
}
#pragma mark - 友盟相关设置

- (void)confitUShareSettings
{
    /*
     * 打开图片水印
     */
    //[UMSocialGlobal shareInstance].isUsingWaterMark = YES;

    /*
     * 关闭强制验证https,可允许http图片分享,但需要在info.plist设置安全域名
     NSAppTransportSecurity
     
     NSAllowsArbitraryLoads
     
     
     */
    //[UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;

}

- (void)useUMengSocialData {
    
    //打开日志
    [[UMSocialManager defaultManager] openLog:YES];
    
    //设置友盟appkey
    [[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"];
    
    // 获取友盟social版本号
    XHHLog(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]);
    
    //各平台的详细配置
    //设置分享到QQ互联的appId和appKey
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"100424468"  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];
    
    //设置微信的appId和appKey
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"];
    // 如果不想显示平台下的某些类型(微信收藏),可用以下接口设置
    [[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]];
    
}

6.2 设置系统回调

在AppDelegate.m中设置如下代码

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
        
    }
    return result;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    if (!result) {
        
    }
    return result;
}

6.3 第三方平台分享

在所需控制器里:
由于6.1版开始更新了全新的分享面板,所以导入形式也略有改变. 将 #import 改成 #import 将#import "UMSocialUIManager.h" 改成#import

#import 
#import 

接口没变,回调block参数调整将[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMShareMenuSelectionView *shareSelectionView, UMSocialPlatformType platformType){ }];改为[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) { }];

#pragma mark - UMSocialUIDelegate

/**
 * 分享
 */
- (void)shareClick {
    
    //显示分享面板
    __weak typeof(self) weakSelf = self;
    [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
        
        [weakSelf shareWebPageToPlatformType:platformType];
    }];
}

6.4 设置分享内容

这里以分享网页举栗子:


//网页分享
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType {
    //创建分享消息对象
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    
    //创建网页内容对象
    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.shopModel.name descr:@"分享内容描述" thumImage:[NSString stringWithFormat:@"%@%@", XHH_HostUrl, self.shopModel.img]];
    //设置网页地址
    shareObject.webpageUrl =@"http://mobile.umeng.com/social";
    
    //分享消息对象设置分享内容对象
    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) {
            result = [NSString stringWithFormat:@"Share fail with error code: %d\n",(int)error.code];
        }
        else{
            result = [NSString stringWithFormat:@"分享失败"];
        }
        // result = [NSString stringWithFormat:@"分享失败"];
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:self.shopModel.name
                                                    message:result
                                                   delegate:nil
                                          cancelButtonTitle:@"确定"
                                          otherButtonTitles:nil];
    
    [alert show];
}

v6.0.1之后 分享未安装客户端或客户端版本不支持时会在分享面板隐藏平台,也就是说模拟器未安装这些平台,就会在分享面板隐藏平台!

这个时候我们可以在点击分享按钮事件里相对应去判断:
手机是否安装微信和QQ给出提示,提高用户体验.

if (![QQApiInterface isQQInstalled] && ![WXApi isWXAppInstalled]) { //没有安装微信和QQ
    [MBProgressHUD showError:@"请安装微信或者QQ客户端后分享"];
} else {  // 两者皆安装则分享
    
    [self shareClick];
}

由于目前精简版,不能读取这个判断是否安装的接口,可用

// 判断是否安装微信
[[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"weixin://"]] 

// 判断是否安装QQ
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]] 

// 判断是否安装微博
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weibo://"]]
iOS10之友盟分享6.8.0_第11张图片
弹出分享面板

之前针对 iOS9写的iOS友盟第三方登录及分享,这里是微信 QQ 微博分享的,有需要请移步:iOS友盟第三方登录及分享

分享SDK6.1之后的版本全面支持HTTPS协议,各位开发者不要使用6.1版本之前的SDK,避免后续无法通过AppStore审核!!!!!

你可能感兴趣的:(iOS10之友盟分享6.8.0)