Bison教你3分钟集成支付宝好友分享

支付宝.jpg

不知不觉的支付宝已经成为我们生活中不可或缺的一款APP,由最初的纯支付APP发展到现在集各种实用的小功能着实不容易,今天在此要给大家说说这改变导致关于我们程序员必须要做的事情,那就是迅速增加分享到支付宝好友的功能。
说到这,其实我也是无意间看到了微博客户端有分享到支付宝好友的功能,好奇来着,就弄着玩玩,像友盟、ShareSDK之类的第三方到目前为止貌似还没有增加这项分享的。
下面我带大家怎么完成这项简单的任务。恩,非常简单,看标题就知道了。。。😄
下面我们来说重点:


准备工作

  • 申请你的AppID。请到支付宝开放平台应用登记页面进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。
  • 下载并解压接口压缩文件(文件名是SocialSDK.zip)。

步骤1:启动IDE(如Xcode),把SocialSDK文件夹中以下文件拷贝到项目文件夹下,并导入到项目工程中。

A1ACFBC0-964D-4E7B-85E0-8DA6AE7AC4C0.png
APOpenAPI.h
APOpenAPIObject.h
libAPOpenSdk.a

步骤2:在需要调用SocialSDK的文件中,增加头文件引用。

#import "APOpenAPI.h"

步骤3:工程配置

  • 为Other Linker Flags 添加 -all_load

  • 为URL Types 添加支付宝回调scheme

注意

  1. identifier必须为 alipayShare
  2. URL Schemes 命名规则:ap+AppID
  • iOS 9以后的系统需要添加支付宝的分享scheme

支付宝分享的URL Schemes 命名为:alipayshare

步骤4:注册应用并添加必要的URL Handler

如示例AppDelegate.m文件中,增加引用代码:

#import "APOpenAPI.h"

在@implementation AppDelegate中增加如下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    //  创建供Demo使用的根视图
    APRootViewController *rootViewController = [[APRootViewController alloc] initWithNibName:nil bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    self.window.rootViewController = navigationController;
    
    //  配置应用的AppId
    //      重要:必须先在支付宝开放平台申请您的AppId才能正常使用支付宝社交分享功能
    //      Demo中的AppId,使用xxxxxxxxxx代替
    [APOpenAPI registerApp:@"xxxxxxxxxx"];
    
    return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //  处理支付宝通过URL启动App时传递的数据
    return [APOpenAPI handleOpenURL:url delegate:self];
}

步骤5:分享数据到支付宝钱包

发送分享请求的过程主要分为两部分:

  • 组装APMediaMessage对象
  • 调用sendReq发送接口

不同类型的分享数据主要通过APMediaMessage内的mediaObject对象进行区分:

  • APShareTextObject 纯文本数据
  • APShareImageObject 图片数据
  • APShareWebObject 网页数据

分享纯文本

//  发送文本消息到支付宝
- (void)sendText
{
    //  创建消息载体 APMediaMessage 对象
    APMediaMessage *message = [[APMediaMessage alloc] init];
    
    //  创建文本类型的消息对象
    APShareTextObject *textObj = [[APShareTextObject alloc] init];
    textObj.text = @"此处填充发送到支付宝的纯文本信息";
    //  回填 APMediaMessage 的消息对象
    message.mediaObject = textObj;
    
    //  创建发送请求对象
    APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init];
    //  填充消息载体对象
    request.message = message;
    //  发送请求
    [APOpenAPI sendReq:request];
}

分享纯图片(图片链接形式)

//  发送图片消息到支付宝(图片链接形式)
- (void)sendPhotoByUrl
{
    //  创建消息载体 APMediaMessage 对象
    APMediaMessage *message = [[APMediaMessage alloc] init];
    
    //  创建图片类型的消息对象
    APShareImageObject *imgObj = [[APShareImageObject alloc] init];
    imgObj.imageUrl = @"此处填充图片的url链接地址";
    //  回填 APMediaMessage 的消息对象
    message.mediaObject = imgObj;
    
    //  创建发送请求对象
    APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init];
    //  填充消息载体对象
    request.message = message;
    //  发送请求
    [APOpenAPI sendReq:request];
}

分享纯图片(图片数据形式)

//  发送图片消息到支付宝(图片数据形式)
- (void)sendPhotoByData
{
    //  创建消息载体 APMediaMessage 对象
    APMediaMessage *message = [[APMediaMessage alloc] init];
    
    //  创建图片类型的消息对象
    APShareImageObject *imgObj = [[APShareImageObject alloc] init];
    //  此处填充图片data数据,例如 UIImagePNGRepresentation(UIImage对象)
    //  此处必须填充有效的image NSData类型数据,否则无法正常分享
    imgObj.imageData = nil;
    //  回填 APMediaMessage 的消息对象
    message.mediaObject = imgObj;
    
    //  创建发送请求对象
    APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init];
    //  填充消息载体对象
    request.message = message;
    //  发送请求
    [APOpenAPI sendReq:request];
}

分享网页(缩略图链接形式)

//  发送网页消息到支付宝(缩略图链接形式)
- (void)sendWebByUrl
{
    //  创建消息载体 APMediaMessage 对象
    APMediaMessage *message = [[APMediaMessage alloc] init];
    
    message.title = @"此处填充网页标题";
    message.desc = @"此处填充网页简要内容";
    message.thumbUrl = @"此处填充缩略图的url链接地址";
    
    //  创建网页类型的消息对象
    APShareWebObject *webObj = [[APShareWebObject alloc] init];
    webObj.wepageUrl = @"此处填充网页url链接地址";
    //  回填 APMediaMessage 的消息对象
    message.mediaObject = webObj;
    
    //  创建发送请求对象
    APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init];
    //  填充消息载体对象
    request.message = message;
    //  发送请求
    [APOpenAPI sendReq:request];
}

分享网页(缩略图数据形式)

//  发送网页消息到支付宝(缩略图链接形式)
- (void)sendWebByData
{
    //  创建消息载体 APMediaMessage 对象
    APMediaMessage *message = [[APMediaMessage alloc] init];
    
    message.title = @"此处填充网页标题";
    message.desc = @"此处填充网页简要内容";
    //  此处填充缩略图data数据,例如 UIImagePNGRepresentation(UIImage对象)
    //  此处必须填充有效的image NSData类型数据,否则无法正常分享
    message.thumbData = nil;
    
    //  创建网页类型的消息对象
    APShareWebObject *webObj = [[APShareWebObject alloc] init];
    webObj.wepageUrl = @"此处填充网页url链接地址";
    //  回填 APMediaMessage 的消息对象
    message.mediaObject = webObj;
    
    //  创建发送请求对象
    APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init];
    //  填充消息载体对象
    request.message = message;
    //  发送请求
    [APOpenAPI sendReq:request];
}

注意
分享纯图片、网页缩略图时,可以使用两种形式:图片url、图片data。
支付宝内优先使用图片data形式。

步骤6: 响应自支付宝返回的分享处理结果

/*
 *  收到一个来自支付宝的请求,第三方应用程序处理完后调用sendResp向支付宝发送结果
 *
 *  入参
 *      req : 支付宝向第三方发来的请求类
 */
- (void)onReq:(APBaseReq*)req
{}
/*
 *  第三方应用程序发送一个sendReq后,收到支付宝的响应结果
 *
 *  入参
 *      resp : 第三方应用收到的支付宝的响应结果类,目前支持的类型包括 APSendMessageToAPResp(分享消息)
 */
- (void)onResp:(APBaseResp*)resp
{
    //  Demo内主要是将响应结果通过alert的形式反馈出来,第三方应用可以根据 errCode 进行相应的处理。
    NSString *title = nil;
    NSString *message = nil;
    if (resp.errCode == APSuccess) {
        title = @"成功";
    } else {
        title = @"失败";
        message = [NSString stringWithFormat:@"%@(%d)", resp.errStr, resp.errCode];
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alert show];
}

1.4 判断当前设备是否支持分享

支付宝钱包从9.0版本开始支持分享,api中提供了接口来判断当前设备是否能够支持分享到支付宝钱包。

  • [1]判断当前设备是否已经安装支付宝钱包
/*! @brief 检查支付宝是否已被用户安装
 *
 * @return 支付宝已安装返回YES,未安装返回NO。
 */
+(BOOL) isAPAppInstalled;
  • [2]判断当前设备是否支持分享到支付宝(已经安装支付宝&&支付宝版本支持分享)
/*! @brief 判断当前支付宝的版本是否支持OpenApi
 *
 * @return 支持返回YES,不支持返回NO。
 */
+(BOOL) isAPAppSupportOpenApi;
  • [3]获取支付宝钱包在AppStore的下载链接,未安装钱包时可使用该链接跳转安装
/*! @brief 获取支付宝的itunes安装地址
 *
 * @return 支付宝的安装地址字符串。
 */
+(NSString *) getAPAppInstallUrl;

至此,你已经能够使用支付宝分享SDK的所有内容了。
具体的处理逻辑请参考Demo内的示例代码。

PS:

最后跟大家说下支付宝里面需要填的Bundle ID 必须和项目中的一样哦!

否则会出现----鉴权失败

Demo下载地址:https://github.com/AllLuckly/-iOS_Demo

技术交流群:511040024

好文推荐:iOS9新特性之实现3D Touch就是So easy--OC版

更多经验请点击
原文在:http://www.allluckly.cn/

如对你有帮助,请不要吝惜你的star和喜欢哦!

技术交流群:534926022(免费) 511040024(0.8/人付费)

推荐一款学习iOS开发的app_____|______| | 传送门

版权归©Bison所有 未经允许不得转载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容