• iOS 分享功能开发


    iOS 开发过程中可能会遇到需要进行第三方分享的需求,比如向QQ,微信,微博等分享

    如下图

    我们今天要讲到的方式是使用了一个第三方工具: http://www.sharesdk.cn

    一,注册账号

    去官网注册:http://www.sharesdk.cn

    创建应用,最终获得 App Key,App Secret

    二,SDK集成

    下载SDK

    把下载的SDK拖到项目工程,在弹出的对话框中选中"Copy items if needed"和"Create groups",并点击“Finish“按钮

    添加依赖库文件
    必须添加的依赖库:
    SystemConfiguration.framework
    QuartzCore.framework 
    CoreTelephony.framework
    libicucore.dylib
    libz.1.2.5.dylib
    Security.framework

    根据社交平台需要添加的依赖库

    Social.framework    腾讯微博
    Accounts.framework  腾讯微博
    MessageUI.framework 短信和邮件
    libstdc++.dylib   QQ好友和QQ空间SSO授权需要(新注册的腾讯开放平台帐号只支持SSO授权权限)
    libsqlite3.dylib   QQ好友和QQ空间SSO授权需要(新注册的腾讯开放平台帐号只支持SSO授权权限)
    CoreMotion.framework   Google+ 
    CoreLocation.framework Google+
    MediaPlayer.framework  Google+
    CoreText.framework   Google+ 
    AssetsLibrary.framework    Google+
    AddressBook.framework  Google+

    到此为止SDK集成就算完成 下来我们开始代码部分

    三,初始ShareSDK和社交平台

    在AppDelegate.m中添加ShareSDK头文件

    1.设置根视图控制器

    必须设置rootViewController。如果使用storyBoard,系统会自动设置根视图控制器。

     

    [objc] view plain copy
    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    2.     // Override point for customization after application launch.  
    3.       
    4.     _window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];  
    5.     _window.backgroundColor =[UIColor colorWithRed:249/255.0 green:249/255.0 blue:249/255.0 alpha:1];  
    6.     HelpViewController *mainController=[[HelpViewController alloc]init];  
    7.     _window.rootViewController=mainController;  
    8.     [_window makeKeyAndVisible];  
    9.   
    10.     return YES;  
    11. }  

    以上示例代码中讲 HelpViewController 的一个对象设置为了 此应用的rootViewcontroller;

     

    2.初始化ShareSDK

    导入头文件,加上初始化方法。

     

    [objc] view plain copy
    1. #import <ShareSDK/ShareSDK.h>  

    [objc] view plain copy
    1. //1.初始化ShareSDK应用,字符串"iosv1101"是应该换成你申请的ShareSDK应用中的Appkey  
    2. [ShareSDK registerApp:@"iosv1101"];  
    3.   
    4. //2. 初始化社交平台  
    5. //2.1 代码初始化社交平台的方法  
    6. [self initializePlat];  

    [self initializePlat ]  方法见下一步(此处以微信,qq,腾讯微博 ,新浪微博为例);

    3.初始化社交平台

    可以用代码初始化或在ShareSDK开发者后台的社会化平台设置中填入社交平台的信息。

     

    [objc] view plain copy
    1. #import "WXApi.h"  
    2. #import "WeiboSDK.h"  
    3. #import "WeiboApi.h"  
    4. #import <TencentOpenAPI/QQApi.h>  
    5. #import <TencentOpenAPI/QQApiInterface.h>  
    6. #import <TencentOpenAPI/TencentOAuth.h>  

    社交平台的AppKey、AppSecret、回调地址等需要您自已去相应平台新建应用获取。
    [objc] view plain copy
    1. - (void)initializePlat  
    2. {  
    3.     /** 
    4.      连接微信应用以使用相关功能,此应用需要引用WeChatConnection.framework和微信官方SDK 
    5.      http://open.weixin.qq.com上注册应用,并将相关信息填写以下字段 
    6.      **/  
    7.     [ShareSDK connectWeChatWithAppId:@""  
    8.                            appSecret:@""  
    9.                            wechatCls:[WXApi class]];  
    10.     /** 
    11.      连接QQ应用以使用相关功能,此应用需要引用QQConnection.framework和QQApi.framework库 
    12.      http://mobile.qq.com/api/上注册应用,并将相关信息填写到以下字段 
    13.      **/  
    14.     //旧版中申请的AppId(如:QQxxxxxx类型),可以通过下面方法进行初始化  
    15.     //    [ShareSDK connectQQWithAppId:@"QQ075BCD15" qqApiCls:[QQApi class]];  
    16.       
    17.     [ShareSDK connectQQWithQZoneAppKey:@""  
    18.                      qqApiInterfaceCls:[QQApiInterface class]  
    19.                        tencentOAuthCls:[TencentOAuth class]];  
    20.       
    21.       
    22.       
    23.       
    24.     //  
    25.     /** 
    26.      连接腾讯微博开放平台应用以使用相关功能,此应用需要引用TencentWeiboConnection.framework 
    27.      http://dev.t.qq.com上注册腾讯微博开放平台应用,并将相关信息填写到以下字段 
    28.       
    29.      如果需要实现SSO,需要导入libWeiboSDK.a,并引入WBApi.h,将WBApi类型传入接口 
    30.      **/  
    31.     [ShareSDK connectTencentWeiboWithAppKey:@""  
    32.                                   appSecret:@""  
    33.                                 redirectUri:@"http://www.sharesdk.cn"  
    34.                                    wbApiCls:[WeiboApi class]];  
    35.     //  
    36.       
    37.       
    38.       
    39.       
    40.     /** 
    41.      连接QQ空间应用以使用相关功能,此应用需要引用QZoneConnection.framework 
    42.      http://connect.qq.com/intro/login/上申请加入QQ登录,并将相关信息填写到以下字段 
    43.       
    44.      如果需要实现SSO,需要导入TencentOpenAPI.framework,并引入QQApiInterface.h和TencentOAuth.h,将QQApiInterface和TencentOAuth的类型传入接口 
    45.      **/  
    46.     //    [ShareSDK connectQZoneWithAppKey:@""  
    47.     //                           appSecret:@""  
    48.     //                   qqApiInterfaceCls:[QQApiInterface class]  
    49.     //                     tencentOAuthCls:[TencentOAuth class]];  
    50.       
    51.       
    52.     /** 
    53.      连接新浪微博开放平台应用以使用相关功能,此应用需要引用SinaWeiboConnection.framework 
    54.      http://open.weibo.com上注册新浪微博开放平台应用,并将相关信息填写到以下字段 
    55.      **/  
    56.     [ShareSDK connectSinaWeiboWithAppKey:@""  
    57.                                appSecret:@""  
    58.                              redirectUri:@"http://www.sharesdk.cn"];  
    59.       
    60.       
    61. }  


    四,设置URL Scheme

    1.需要依赖客户端分享或者要支持SSO授权(可以理解成跳到客户端授权)的平台都需要配置平台的URL Scheme(应用分享到社交平台后通过识别URL Scheme返回应用)。具体配置URL Scheme请参考iOS配置SSO授权

    (http://wiki.mob.com/%E9%85%8D%E7%BD%AEsso%E6%8E%88%E6%9D%83-2/)。

    2.需要在AppDelegate.m中添加处理打开链接的方法


    [objc] view plain copy
    1. - (BOOL)application:(UIApplication *)application  
    2.       handleOpenURL:(NSURL *)url  
    3. {  
    4.     return [ShareSDK handleOpenURL:url  
    5.                         wxDelegate:self];  
    6. }  
    7.   
    8. - (BOOL)application:(UIApplication *)application  
    9.             openURL:(NSURL *)url  
    10.   sourceApplication:(NSString *)sourceApplication  
    11.          annotation:(id)annotation  
    12. {  
    13.     return [ShareSDK handleOpenURL:url  
    14.                  sourceApplication:sourceApplication  
    15.                         annotation:annotation  
    16.                         wxDelegate:self];  
    17. }  


    五,构造分享内容并分享

    1.构造一个id<ISSContent>类型的对象,把需要分享的标题、内容、图片、URL等 包装在这个对象。

     在需要分享的viewController 中导入头文件

     

    [objc] view plain copy
    1. #import <ShareSDK/ShareSDK.h>  

    在需要分享的地方 实现如下方法

    比如在点击一个button的时候调用方法 shareAct

     

    [objc] view plain copy
    1. -(void)shareAct:(id)sender  
    2. {  
    3. //      
    4.     NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"ShareSDK" ofType:@"jpg"];  
    5.       
    6.     //1、构造分享内容  
    7.     id<ISSContent> publishContent = [ShareSDK content:@"要分享的内容"  
    8.                                        defaultContent:@"默认内容"  
    9.                                                 image:[ShareSDK imageWithPath:imagePath]  
    10.                                                 title:@"ShareSDK"  
    11.                                                   url:@"http://www.mob.com"  
    12.                                           description:@"这是一条演示信息"  
    13.                                             mediaType:SSPublishContentMediaTypeNews];  
    14.     //1+创建弹出菜单容器(iPad必要)  
    15.     id<ISSContainer> container = [ShareSDK container];  
    16.     [container setIPadContainerWithView:sender arrowDirect:UIPopoverArrowDirectionUp];  
    17.       
    18.     //2、弹出分享菜单  
    19.     [ShareSDK showShareActionSheet:container  
    20.                          shareList:nil  
    21.                            content:publishContent  
    22.                      statusBarTips:YES  
    23.                        authOptions:nil  
    24.                       shareOptions:nil  
    25.                             result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {  
    26.                                   
    27.                                 //可以根据回调提示用户。  
    28.                                 if (state == SSResponseStateSuccess)  
    29.                                 {  
    30.                                     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享成功"  
    31.                                                                                     message:nil  
    32.                                                                                    delegate:self  
    33.                                                                           cancelButtonTitle:@"OK"  
    34.                                                                           otherButtonTitles:nil, nil nil];  
    35.                                     [alert show];  
    36.                                 }  
    37.                                 else if (state == SSResponseStateFail)  
    38.                                 {  
    39.                                     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享失败"  
    40.                                                                                     message:[NSString stringWithFormat:@"失败描述:%@",[error errorDescription]]  
    41.                                                                                    delegate:self  
    42.                                                                           cancelButtonTitle:@"OK"  
    43.                                                                           otherButtonTitles:nil, nil nil];  
    44.                                     [alert show];  
    45.                                 }  
    46.                             }];  
    47.   
    48. }  


    到此基本完成

    测试一下 点击微博分享 

  • 相关阅读:
    Codeforces Round #741 (Div. 2)部分题题解
    Wedding DJ题解 (回归OI)
    Note -「模板」FHQ-Treap
    Solution -「数论」「校内题」矩阵求和
    【游记】WC2021抱铃记
    洛谷 P7073 /AcWing 2769. 表达式
    洛谷 P3004 [USACO10DEC]Treasure Chest S/CSES 1097
    P7074 [CSP-J2020] 方格取数
    Unity Built-in转URP速查表
    英国学生签证准备材料+办理流程等
  • 原文地址:https://www.cnblogs.com/luoxiaofu/p/5530311.html
Copyright © 2020-2023  润新知