[iOS初级教程之一]社会化分享实践(三)

简介: [iOS初级教程之一]社会化分享实践

五、接入分享功能


    现在,万事俱备,只欠东风。我们已经做完了实现分享功能的所有准备工作。可以进行工程的配置和代码的编写了。


1. 初始化友盟SDK与回调设置


   初始化友盟SDK是使用分享功能的第一步,这里我们需要初始化友盟应用并为各个分享平台进行配置,示例代码如下:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

   [self configShare];

   [self configPlatform];

   return YES;

}


- (void)configShare {

   [UMConfigure initWithAppkey:@"602505af668f9e17b8aef059" channel:nil];

   [UMSocialGlobal shareInstance].universalLinkDic = @{

       @(UMSocialPlatformType_WechatSession):@"https://umplus-sdk-download.oss-cn-shanghai.aliyuncs.com/",

                                                         

       @(UMSocialPlatformType_QQ):@"https://umplus-sdk-download.oss-cn-shanghai.aliyuncs.com/qq_conn/101830139"

                                                           };

}


- (void)configPlatform {

   [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxdc1e388c3822c80b" appSecret:@"3baf1193c85774b3fd9d18447d76cab0" redirectURL:@"http://mobile.umeng.com/social"];

          [[UMSocialManager defaultManager] setLauchFromPlatform:(UMSocialPlatformType_WechatSession) completion:^(id userInfoResponse, NSError *error) {

          NSLog(@"setLauchFromPlatform:userInfoResponse:%@",userInfoResponse);

   }];

   [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"1105821097"  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];

 

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

}

上面代码都写在AppDelegate类中,实际应用中,我们也可以根据使用时机来进行初始化。上面代码中,configShare方法用来进行友盟SDK本身的初始化和配置,configPlatform方法用来对第三方分享平台进行配置。


     还需要实现几个AppDelegate的回调来处理通过分享链接打开App后的后续逻辑,示例代码如下:


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

   BOOL res = [[UMSocialManager defaultManager] handleOpenURL:url];

   return res;

}


- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

   BOOL res = [[UMSocialManager defaultManager] handleOpenURL:url options:options];

   return res;

}


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

   BOOL res = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];

   return res;

}


- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {

   BOOL res = [[UMSocialManager defaultManager] handleUniversalLink:userActivity options:nil];

   return res;

}

2. 白名单配置


     目前,代码配置部分基本完成,下面我们需要在工程的info.plist文件中对要分享的三方平台进行白名单配置。在info.plist文件中添加LSApplicationQueriesSchemes键,其值配置为列表,具体各个分享平台的白名单列举如下:



<key>LSApplicationQueriesSchemes</key>

<array>

   <!-- 微信 URL Scheme 白名单-->

   <string>wechat</string>

   <string>weixin</string>

   <string>weixinULAPI</string>


<!-- QQ、Qzone URL Scheme 白名单-->

   <string>mqqopensdklaunchminiapp</string>

   <string>mqqopensdkminiapp</string>

   <string>mqqapi</string>

   <string>mqq</string>

   <string>mqqOpensdkSSoLogin</string>

   <string>mqqconnect</string>

   <string>mqqopensdkdataline</string>

   <string>mqqopensdkgrouptribeshare</string>

   <string>mqqopensdkfriend</string>

   <string>mqqopensdkapi</string>

   <string>mqqopensdkapiV2</string>

   <string>mqqopensdkapiV3</string>

   <string>mqqopensdkapiV4</string>

   <string>mqzoneopensdk</string>

   <string>wtloginmqq</string>

   <string>wtloginmqq2</string>

   <string>mqqwpa</string>

   <string>mqzone</string>

   <string>mqzonev2</string>

   <string>mqzoneshare</string>

   <string>wtloginqzone</string>

   <string>mqzonewx</string>

   <string>mqzoneopensdkapiV2</string>

   <string>mqzoneopensdkapi19</string>

   <string>mqzoneopensdkapi</string>

   <string>mqqbrowser</string>

   <string>mttbrowser</string>

   <string>tim</string>

   <string>timapi</string>

   <string>timopensdkfriend</string>

   <string>timwpa</string>

   <string>timgamebindinggroup</string>

   <string>timapiwallet</string>

   <string>timOpensdkSSoLogin</string>

   <string>wtlogintim</string>

   <string>timopensdkgrouptribeshare</string>

   <string>timopensdkapiV4</string>

   <string>timgamebindinggroup</string>

   <string>timopensdkdataline</string>

   <string>wtlogintimV1</string>

   <string>timapiV1</string>


   <!-- 新浪微博 URL Scheme 白名单-->

   <string>sinaweibohd</string>

   <string>sinaweibo</string>

   <string>sinaweibosso</string>

   <string>weibosdk</string>

   <string>weibosdk2.5</string>



   <!-- 支付宝 URL Scheme 白名单-->

   <string>alipay</string>

   <string>alipayshare</string>


   <!-- 钉钉 URL Scheme 白名单-->

     <string>dingtalk</string>

     <string>dingtalk-open</string>


   <!-- 企业微信-->

     <string>wxwork</string>

   <string>wxworkdebug</string>

   <string>wxworkrdm</string>

   <string>wxworkrelease</string>


     <!--抖音-->

     <string>douyinopensdk</string>

   <string>douyinsharesdk</string>

   <string>snssdk1128</string>


   <!--Linkedin URL Scheme 白名单-->

   <string>linkedin</string>

   <string>linkedin-sdk2</string>

   <string>linkedin-sdk</string>


   <!-- 易信 URL Scheme 白名单-->

   <string>yixin</string>

   <string>yixinopenapi</string>


   <!-- instagram URL Scheme 白名单-->

   <string>instagram</string>


   <!-- whatsapp URL Scheme 白名单-->

   <string>whatsapp</string>


   <!-- line URL Scheme 白名单-->

   <string>line</string>


   <!-- Facebook URL Scheme 白名单-->

   <string>fbapi</string>

   <string>fb-messenger-api</string>

   <string>fb-messenger-share-api</string>

   <string>fbauth2</string>

   <string>fbshareextension</string>


   <!-- Kakao URL Scheme 白名单-->  

   <!-- 注:以下第一个参数需替换为自己的kakao appkey-->

   <!-- 格式为 kakao + "kakao appkey"-->    

   <string>kakaofa63a0b2356e923f3edd6512d531f546</string>

   <string>kakaokompassauth</string>

   <string>storykompassauth</string>

   <string>kakaolink</string>

   <string>kakaotalk-4.5.0</string>

   <string>kakaostory-2.9.0</string>


  <!-- pinterest URL Scheme 白名单-->  

   <string>pinterestsdk.v1</string>


  <!-- Tumblr URL Scheme 白名单-->  

   <string>tumblr</string>


  <!-- 印象笔记 -->

   <string>evernote</string>

   <string>en</string>

   <string>enx</string>

   <string>evernotecid</string>

   <string>evernotemsg</string>


  <!-- 有道云笔记-->

   <string>youdaonote</string>

   <string>ynotedictfav</string>

   <string>com.youdao.note.todayViewNote</string>

   <string>ynotesharesdk</string>


  <!-- Google+-->

   <string>gplus</string>


  <!-- Pocket-->

   <string>pocket</string>

   <string>readitlater</string>

   <string>pocket-oauth-v1</string>

   <string>fb131450656879143</string>

   <string>en-readitlater-5776</string>

   <string>com.ideashower.ReadItLaterPro3</string>

   <string>com.ideashower.ReadItLaterPro</string>

   <string>com.ideashower.ReadItLaterProAlpha</string>

   <string>com.ideashower.ReadItLaterProEnterprise</string>


  <!-- VKontakte-->

   <string>vk</string>

   <string>vk-share</string>

   <string>vkauthorize</string>


  <!-- Twitter-->

   <string>twitter</string>

   <string>twitterauth</string>


</array>

需要注意,默认在Xocde中打开的info.plist文件是以plist浏览模式打开的,如下:


image.png


我们可以以文本的方式打开,将所需要的代码复制进去即可,方法如下图所示:


image.png


3.配置URL Scheme


     配置白名单的目的是为了让我们的应用可以打开第三方App进行分享操作,而配置URL Scheme的作用是当分享操作完成后,第三方App可以再次唤醒我们的App,回到App内做后续逻辑。


     在工程的Info项目中进行URL Types的配置,如下图所示:

image.png



如上图中,我们只配置了微信和QQ的URL Scheme,在配置的时候,不同平台有不同的规则,例如微信是:


wx + 微信开放平台的应用appKey


具体每个分享平台的配置规则可参考如下文档:


https://developer.umeng.com/docs/128606/detail/193653#h3--sso-12


六、进行分享操作


     前面的工作完成后,进行分享操作就非常容易,以文本分享为例,只需要创建出UMSocialMessageObject对象即可,示例代码如下:


- (void)shareText:(UMSocialPlatformType)type {

   UMSocialMessageObject *object = [[UMSocialMessageObject alloc] init];

   object.text = @"title";

   [[UMSocialManager defaultManager] shareToPlatform:type messageObject:object currentViewController:self completion:^(id result, NSError *error) {

       NSLog(@"%@",error);

   }];

}

同样,我们也可以分享网页、小程序、图文、视频、音乐等数据,使用不同的传参即可,具体分享类型的传参方式可以在下面的文档中查询:


https://developer.umeng.com/docs/128606/detail/193655#h2-u5206u4EABu7F51u9875u94FEu63A51


     调用如上的方法进行分享是纯业务逻辑层面的,我们可以根据需求任意的定制化自己的分享UI。如果你接入了UShareUI库,则可以仅仅通过一些简单的配置,更加快速的接入分享功能,示例代码如下:


@implementation ViewController


- (void)viewDidLoad {

   [super viewDidLoad];

   [UMSocialShareUIConfig shareInstance].sharePageScrollViewConfig.shareScrollViewBackgroundColor = [UIColor greenColor];

 

}


- (IBAction)share:(id)sender {

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

       [self shareText:platformType];

   }];

}


- (void)shareText:(UMSocialPlatformType)type {

   UMSocialMessageObject *object = [[UMSocialMessageObject alloc] init];

   object.text = @"title";

   [[UMSocialManager defaultManager] shareToPlatform:type messageObject:object currentViewController:self completion:^(id result, NSError *error) {

       NSLog(@"%@",error);

   }];

}


@end

运行上面代码,效果如下图所示:


image.png


这个分享面板中的组件都有暴露接口供开发者进行定制化使用,接入非常便捷。

目录
相关文章
|
2月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
234 19
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
322 2
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
791 3
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
1434 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
|
iOS开发 开发者
ios证书申请最简单的教程
使用uniapp进行开发的时候,点击uniapp打包界面的教程,提示需要Mac电脑申请ios证书,但是手上没有mac电脑,几经周折,终于找到了不需要mac电脑生成ios证书的解决方案。今天将解决方案整理出来。
487 10
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
198 2
|
开发工具 数据安全/隐私保护 iOS开发
探索iOS应用开发的核心理念与实践
【8月更文挑战第23天】在数字时代的浪潮中,iOS应用开发不仅仅是技术的堆砌,更是一场关于创新、用户体验和持续改进的旅程。本文将深入探讨iOS应用开发的核心理念,从设计哲学到开发工具的选择,再到市场趋势的适应,旨在为开发者提供一条清晰的路径,帮助他们在不断变化的技术世界中保持竞争力和创新力。
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
|
iOS开发 Swift
iOS系列教程 目录 (持续更新...)
    前言:   听说搞iOS的都是高富帅,身边妹子无数。咱也来玩玩。哈哈。   本篇所有内容使用的是XCode工具、Swift语言进行开发。     我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现什么问题百度都弄完了才整理发出来的。
1151 0