应用间跳转/社交分享/第三方登录/应用内统计/支付宝

一.应用间跳转

1.简介
  • 应用间跳转的应用场景
  1. 使用第三方登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名"
  2. 应用程序推广,在"推荐应用"界面会有很多应用程序,如果本机已安装,会直接跳转到另外一个应用程序,可以统计软件的广告点击次数,推广结果,后续会有一系列的金钱上的结算
  3. 支付宝,微信支付,跳转到第三方支付界面
  • 应用程序间跳转实现
  • 打开一个APP,其实就是打开对应APP的url
  • 打电话(tel://)
  • 发短信(sms://)
  • 发邮件(mailTo://)
  • 概念须知
  • URL:统一资源定位符,例如:http://www.baidu.com/news/title=新闻
  • scheme(http://)
  • host(www.baidu.com)
  • path(news)
  • query(title=新闻)
2.实现
  • 设置APP Scheme
  • 默认情况下应用程序是没有自己的URL的,如果想要拥有自己的URL,需要设置URL
  • 项目->info->URL Types->URL Scheme
  • 注意:设置scheme时,不要加"://"
  • 跳转方式
  • 注意:跳转之前,可以使用canOpenURL:判断是否可以跳转
  • [[UIApplication shareApplication] openURL:appURL];
  • iOS9.0跳转适配
  • 在info.plist文件中添加LSApplicationQueriesSchemes字段,是数组类型
  • 注意:设置scheme时,不要加"://"
3.如何跳转到不同的界面
  • 跳转到对方APP,对方APP执行的代理方法
  • application:handleOpenURL:
  • 别的APP,可以制定不同的host格式,来实现跳转到不同界面
4.常用设置界面跳转

二.社交分享

1.社交分享的作用
  • 通过用户的分享,让更多的人去了解和使用APP
  • 目前移动互联网应用程序推广的最重要手段之一
  • 属于口碑营销的范畴,经典成功案例"疯狂猜图"
2.社交分享的实现方案
  • 系统自带社交分享
  1. 导入Social.framework
  2. 判断服务是否可用
  • [SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo];
  1. 弹出分享内容输入界面
  • SLComposeViewController *cc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
  • [self presentViewController:cc animated:YES completion:nil];
  1. 额外设置
  • 初始化文字:[cc setInitialText:@"木喳喳的夏天"];
  • 配图:[cc addImage:[UIImage imageNamed:@"test.png"]];
  • 添加URL:[cc addURL:[NSURL URLWithString:@"http://www.baidu.com"]];
  1. 监听分享状态
  • cc.completionHandler = block;
  • block中根据返回的result判断是否分享成功
  • SLComposeViewControllerResultDone:成功,否则就是失败
  • UIActivityViewController
  • 系统应用自带的分享界面,可以分享到备忘录/邮件等
  • 学习地址:http://www.jianshu.com/p/a1c9621a3f4e
  • 第三方SDK实现分享(友盟分享)
  • 基本集成
  • 进入友盟网站,注册账号并登陆
  • 参照集成文档开始集成
  • 创建"友盟应用",并获取对应的APP Key
  • 下载SDK,并集成到项目
  • 在工程中,设置AppKey
  • 添加分享的实现代码
  • 集成效果:对于QQ/微信/微博都需要自己手动集成
  • 常用第三方集成
  • 微信/朋友圈分享集成
  • 指导文档
  • 开始集成
  • 在UMSocial_Sdk_Extra_Framework目录下,添加Wechat文件夹到工程
  • 根据文档,添加依赖的库
  • 添加分享功能代码
  • 在AppDelegate开发微信分享功能
  • UMSocialWechatHandler.setWXAppId(appId,appSecret,url)
  • 配置URL schemes
  • 在工程设置项targets一栏下,选中自己的target,在Info->URL Types中添加URL Scheme,添加Xcode的url scheme为微信应用appId
  • 设置系统回调
  • 设置分享内容
  • UMSocialSnsService.presentSnsIconSheetView(self,appKey,shareText,shareImage,shareToSnsNames,delegate)
  • 新浪微博分享集成
  • 阅读指导文档
  • 开始集成
  • 解压SDK压缩包,将形如UMSocial_Sdk_x.x.x的文件夹拖入工程目录
  • 添加依赖的库(ImageIO)
  • 在other linker flags增加"-ObjC"选项
  • 添加依赖的库
  • 添加分享功能代码
  • 在AppDelegate开发微博分享功能
  • UMSocialSinaSSOHandler.openNewSinaSSOWithAppKey()
  • 配置URL scheme
  • 在工程设置项的target栏下,选中项目的target,在info->url types中添加url schemes,格式为"wb+新浪appkey"
  • 添加系统回调
  • 设置分享内容
  • UMSocialSnsService.presentSnsIconSheetView()
  • QQ/QQ空间集成
  • 阅读指导文档
  • 开始集成
  • 在sdk目录下,添加TencentOpenAPI文件夹到项目工程
  • 添加依赖的库
  • 添加分享功能代码
  • 在AppDelegate开发微信分享功能
  • UMSocialQQHandler.setQQWithAppId()
  • 配置URL schemes
  • target->info->url types中添加URL Schemes
  • 设置Xcode的url schemes格式为"QQ"+腾讯QQ互联应用AppID转换成十六进制(不足8位前面补0)
  • 额外设置url schemes的格式为"tencent"+腾讯QQ互联应用AppID
  • 添加系统回调
  • 设置分享内容
  • UMSocialSnsService.presentSnsIconSheetView()
  • 注意事项
  • 概念补充:授权
  • OAuth2.0授权
  • 一种安全的登录协议,用户提交的账号密码不提交到本APP,而是提交到授权服务器,待服务器确认后,返回本APP一个访问令牌,本APP即可用该访问令牌访问资源服务器的资源.
  • 由于用户的账号密码并不与本人的APP直接交互,而是与官方服务器交互,因而它是安全的
  • SSO授权
  • Single Sign On,用户只需要登录一次即可访问相互信任的子系统
  • 比如:使用APP分享某个新闻时,会直接跳转到手机中已经安装的APP中进行授权,如果已经输入国用户名和密码,下次不需要用户再次输入
  • iOS9.0适配
  • ATS适配
  • NSAppTransportSecurity
  • NSAllowsArbitraryLoads
  • true
  • 应用程序间跳转适配
  • 在各个平台注册应用
  • 以上集成步骤,遗留的问题
  • 每次分享出去之后,分享的内容都会有一个来自xxx的分享,这个xxx的内容,就是第三方平台,创建的应用的名称
  • 关于第三方平台应用的创建
  • 进行分享/授权操作需要在第三方平台创建应用并提交审核,友盟默认提供了大多数平台的测试账号,但如果需要将分享/授权来源/分享到QQ/QZone的icon更改为自己APP的应用,就需要自己申请第三方账号
  • 注意:即使第三方账号审核不通过,友盟后台也会自动绑定测试账号供开发者使用
  • 微信/朋友圈注册应用
  • 新浪微博注册应用
  • QQ注册应用

三.第三方登录

1.第三方登录的介绍
  • 什么是第三方登录
  • 利用用户在第三方平台上已有的账号来快速完成自己应用的登录或注册功能
  • 不是具体的一个接口,而是一套机制,无论是Android还是iOS,都可以使用
  • 为什么需要第三方登录
  • 避免APP内,用户注册登录的繁琐流程
  • 比如网易新闻
  • 在手机端注册登录是一件很麻烦的事情(APP美多一次操作就可能会损失一部分用户)
  • 第三方登录可以有效的省去这样的麻烦
  • 用户都有微博/QQ/微信,可以让用户直接使用已有的账号来快速登录
  • 直接共享部分个人信息(昵称/头像/性别等)
  • 常见的第三方登录平台
  • QQ(从PC端转型到移动端)
  • 微博(相当于国外的Twitter,用户量大)
  • 微信(国内移动端最大用户群的应用)
  • 第三方登录的原理
  • 使用用户的QQ/微信/微博账号生成的ID作为用户身份的标识
  • 选择第三方登录
  • 授权
  • 获取对应的ID和AccessToken
  • 获取用户相关信息
  • 保存用户信息的方式
  • 直接保存用户的ID到服务器,下次用户登录时,id作为用户的身份
  • 获取id后依然提示用户注册,但是下次登录时可以使用id来验证身份
  • 第三方登录的实现方式
  • 自己编写各个平台的代码(太复杂,仅作了解)
  • 使用第三方SDK(方便快捷)
2.集成友盟第三方登录
  • 友盟第三方登录简介
  • 第三方登录主要用于简化用户登录流程
  • 实现第三方登录主要通过下面两步
  • 在第三方平台完成授权
  • 获取第三方平台的AccessToken信息及用户资料
  • 目前友盟社会化组件支持的第三方登录平台
  • 新浪微博
  • 微信
  • QQ/QQ空间等
  • 友盟第三方登录的使用步骤
  • 搜索/下载/开始集成
  • 注意:第三方登录的功能再分享SDK中,因为都需要授权
  • 新浪微博
// 在新浪微博登录按钮中实现下面方法
UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];

snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

// 获取微博用户名、uid、token等

    if (response.responseCode == UMSResponseCodeSuccess) {

        UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];

        NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

    }});
    
// 在授权完成后调用获取用户信息的方法

//获取accestoken以及新浪用户信息,得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"SnsInformation is %@",response.data);
    }];
  • QQ登录
  • QQ登录只支持SSO登录方式(必须安装手机QQ客户端)
  • 注册应用(在腾讯开放平台注册应用)
  • 添加相关库文件(添加TencentOpenAPI文件夹到工程/添加依赖的库文件)
  • 在AppDelegate应用入口方法打开集成手机QQ/Qzone开关
  • 配置URL schemes
  • 添加系统回调
  • 登录的集成
  • 实现在QQ登录按钮被点击时调用的方法
  • 实现在Qzone登录按钮被点击时调用的方法
  • 常见错误
  • 问题:sso package or sign error
  • 原因:必须保证BundleID和在第三方平台创建的应用绑定的BundleID一致
3.注意事项
  • 不要忘记在代理里面实现监听外界传递URL的方法
  • application(app,openURL,options) -> Bool
  • return UMSocialSnsService.handleOpenURL(url)

四.应用统计

1.统计的介绍
  • 通过统计相关的工具,可以统计自己APP的一些数据信息
  • 常用的统计工具
  • 友盟统计:国内使用较多
  • Flurry:全球占有率较多
  • 统计哪些信息
  • 固定时间段,登录用户数量
  • 固定时间段,新注册用户数量
  • 版本分布情况
  • 在某些页面的停留时间
  • 某些事件的点击次数
  • ...
  • 好处(产品经理/开发人员/营销人员)
2.友盟统计的集成
  • 友盟简介
  • 因为国内使用率非常高,所以我们学习如何集成友盟统计
  • 较早开始研究统计功能
  • 注意:某些情况下统计的数量并不一定完全准确,但是基本准确
  • 统计数量并不是实时更新
  • 集成步骤
  • 作为程序的标识符
  • SDK集成
  • 支持将SDK拖入项目中使用
  • 支持使用Cocoapods集成
  • 基本功能集成
  • AppDelegate.m设置相关信息
  • 设置AppKey
  • 设置发送策略(启动时发送/按间隔发送)
  • 填写渠道id
  • channellId为nil或@""时,默认会被当做@"App Store"渠道
  • iOS9中ATS配置(App Transport Security)
  • 由于iOS9引入了ATS特性,要求App访问的网络使用HTTPS协议,如果不做特殊设置,http请求会失败
  • 友盟采取的HTTP协议
  • 在info.plist中增加NSAppTransportSecurity字段,设置为NSAllowsArbitraryLoads
  • version标识
  • 友盟SDK为了兼容Xcode3的工程,默认取的是Build号
  • 如果需要取Xcode4以上的版本的version,可以自己设置版本
  • 账号的统计
  • 按照文档方法集成即可
  • 启动账号统计
  • 集成账号统计功能后,请到我的产品-设置-应用信息,选择启动使用账号统计报表
  • 页面的统计
  • 页面统计集成正确,才能够获取正确的页面访问路径/访问深度(PV)数据
  • 实现页面的统计需要在每个View中配对调用相应的方法
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [MobClick beginLogPageView:@"PageOne"];
}

- (void)viewWillDisappear:(BOOL)animated 
{
    [super viewWillDisappear:animated];
    [MobClick endLogPageView:@"PageOne"];
}
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [MobClick beginLogPageView:@"PageOne"];
}

- (void)viewWillDisappear:(BOOL)animated 
{
    [super viewWillDisappear:animated];
    [MobClick endLogPageView:@"PageOne"];
}
- 日志加密设置
        - 设置加密模式
        - 加密模式可以有效防止网络攻击,提高数据安全性
        - 如果没有设置加密模式,SDK的加密模式为NO(不加密)
    - 后台模式设置
        - 设置在应用切入到后台时,是否进入background模式
        - 后台模式默认为开启状态
- 行为的统计:自定义事件
    - 自定义事件的介绍
        - 可以统计应用中某些事件的发生次数
        - 分类:计数事件/计算事件
        - 需要在友盟后台添加对应的事件ID
    - 计数事件
        - 使用计数事件需要在后台添加事件时选择"计数事件"
        - 通过代码统计发生次数
    - 计算事件
        - 使用计算事件需要在后台添加事件时选择"计算事件"
        - 通过代码统计数值型变量的值的分布
- 错误分析
    - 友盟iOS统计SDK默认自带错误分析功能,不需要开发者手动调用
    - 可以手动关闭:[MobClick setCrashReportEnabled:NO];

五.第三方支付

1.什么是支付宝
  • 第三方支付平台
  • 可以协商客户/商户/银行三者关系的方便平台
  • 团购app都集成了支付宝功能
2.集成支付宝
  • 支付宝流程解释
  1. 用户使用支付宝向商户客户端付款
  2. 商户客户端调用支付接口,打开手机支付宝支付开发包客户端
  3. 支付宝客户端想支付宝服务器发送支付请求
  4. 服务器完成支付,并向商户客户端异步发送支付通知
  5. 支付宝服务端向支付宝客户端返回支付结果
  6. 支付宝客户端向商户客户端返回支付结果
  7. 商户客户端向用户显示交易结果
  • 使用支付宝进行支付的步骤
  • 准备工作
  • 向支付宝申请,与支付宝签约,获得一个可以"手段的商户ID(partner)和账号ID(seller)"和私钥(privateKey)
  • 签约需要提供营业执照等信息
  • 如果不签约,获取到的商户ID是不能获得收款功能,但是集成流程完全一样
  • 必要信息的获取
  • 商户ID
  • 账号ID(收款的支付宝账号)
  • 私钥
  • 本地生成的RSA私钥和公钥
  • 上传公钥
  • 生成pkcs8格式的私钥,用于工程中
  • 下载支付宝SDK
  • 集成步骤
  • 集成SDK
  • 生成订单信息,签名加密
  • 调用支付宝客户端,开始支付
  • 监听支付结果,做不同的业务处理
  • 一般参照demo即可,知道大致流程