美文网首页iOS常见功能demoiOS学习ios
Bison教你3分钟集成支付宝好友分享

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

作者: Bison | 来源:发表于2015-10-21 14:32 被阅读6120次
    支付宝.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所有 未经允许不得转载。

    相关文章

      网友评论

      本文标题:Bison教你3分钟集成支付宝好友分享

      本文链接:https://www.haomeiwen.com/subject/esqthttx.html