[ObjectC]分享到支付宝iOS接入
来源:互联网 发布:ubuntu自带gcc编译器 编辑:程序博客网 时间:2024/05/16 08:05
定义前言
引入SDK头文件:#import "APOpenAPI.h"//支付宝#define ZFB_APP_ID @"2017111509948730"//继承用于回调@interface AppController () <APOpenAPIDelegate>@end
官方文档说明
重新函数
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // self.window = ... 应用初始化代码 // 注册应用会使用到应用的APPID // 请参考前文获取APPID if(![APOpenAPI registerApp:ZFB_APP_ID]) { /*注册失败处理*/ } return YES;}//A: iOS4.2 以下,现在开发的几乎都是支持iOS7+,所以这个函数可以不管- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSLog(@"handleOpenURL: %@", url); //支付宝分享调用 if ([url.scheme isEqualToString:[NSString stringWithFormat:@"ap%@",ZFB_APP_ID]]) { return [APOpenAPI handleOpenURL:url delegate:self]; //delegate如给参nil,则不会走 函数(void) onResp:(BaseResp*)resp } return YES;}//B: iOS9 以下- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"openURL1: %@", url); //支付宝分享调用 if ([url.scheme isEqualToString:[NSString stringWithFormat:@"ap%@",ZFB_APP_ID]]) { return [APOpenAPI handleOpenURL:url delegate:self]; //delegate如给参nil,则不会走 函数(void) onResp:(BaseResp*)resp;若要给self,则需要此类继承APOpenAPIDelegate // } return YES;}//C: iOS9+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options{ NSLog(@"openURL2: %@", url); //支付宝分享调用 if ([url.scheme isEqualToString:[NSString stringWithFormat:@"ap%@",ZFB_APP_ID]]) { return [APOpenAPI handleOpenURL:url delegate:self]; //delegate如给参nil,则不会走 函数(void) onResp:(BaseResp*)resp } return YES;}/*3个回调的功能基本一样,都是在别人通过URL Schemes打开应用的时候会执行的。不同之处:A回调是在iOS2.0的时候推出的,参数只有url。B回到是在iOS4.2的时候推出的,参数有url sourceApplication annotation.C回调是iOS9.0的时候推出的,参数有url options。这几个回调是有优先级的。C>B>A。也就是说,如果你3个回调都实现了,那么程序只会执行C回调。其他回调是不会执行的。(当然,iOS9以下只会执行B回调)*///接受和处理支付宝返回的响应消息//当你的应用成功将分享请求消息发送给支付宝钱包后,用户将在钱包中完成分享操作,在用户完成操作后,支付宝将会把用户操作的结果消息返回给您的应用。你可以通过以下方法获取到消息:- (void) onResp:(BaseResp*)resp{ //支付宝分享的返回 if([resp isKindOfClass:[APSendMessageToAPResp class]]) { NSLog(@"APP SendMessageToAlipayResp"); APSendMessageToAPResp * tmpResp = (APSendMessageToAPResp *)resp; NSString* res = [[NSString alloc] initWithFormat:@"%d&%@", tmpResp.errCode, tmpResp.errStr]; if(_authCodeScriptHandler) { cocos2d::LuaBridge::pushLuaFunctionById(_authCodeScriptHandler); cocos2d::LuaStack *stack = cocos2d::LuaBridge::getStack(); stack->pushString([res UTF8String]); stack->executeFunction(1); cocos2d::LuaBridge::releaseLuaFunctionById(_authCodeScriptHandler); _authCodeScriptHandler = 0; } }}
函数接口
//支付宝分享文本信息+ (void)shareTextToZFB:(NSDictionary *)dict{ NSString *text = [dict objectForKey:@"text"]; // lua回调函数 int scriptHandler = [[dict objectForKey:@"scriptHandler"] intValue]; if (_authCodeScriptHandler) { cocos2d::LuaBridge::releaseLuaFunctionById(_authCodeScriptHandler); } _authCodeScriptHandler = scriptHandler; // 创建消息载体 APMediaMessage 对象 APMediaMessage *message = [[APMediaMessage alloc] init]; // 创建文本类型的消息对象 APShareTextObject *textObj = [[APShareTextObject alloc] init]; textObj.text = text; // 回填 APMediaMessage 的消息对象 message.mediaObject = textObj; // 创建发送请求对象 APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init]; // 填充消息载体对象 request.message = message; // 分享场景,0为分享到好友,1为分享到生活圈;支付宝9.9.5版本至当前版本,分享入口已合并,scene参数并没有被使用,用户会在跳转进支付宝后选择分享场景(好友、动态、圈子等),但为保证老版本上无问题,建议还是照常传入。 //request.scene = 0; // 发送请求 BOOL result = [APOpenAPI sendReq:request]; if (!result) { //失败处理 NSLog(@"shareTextToZFB发送失败"); }}//支付宝分享图片信息+ (void)shareImageToZFB:(NSDictionary *)dict{ NSString *filePath = [dict objectForKey:@"imgFilePath"]; NSLog(@"filePath:[%@]", filePath); // lua回调函数 int scriptHandler = [[dict objectForKey:@"scriptHandler"] intValue]; if (_authCodeScriptHandler) { cocos2d::LuaBridge::releaseLuaFunctionById(_authCodeScriptHandler); } _authCodeScriptHandler = scriptHandler; // 创建消息载体 APMediaMessage 对象 APMediaMessage *message = [[APMediaMessage alloc] init]; // 创建图片类型的消息对象 APShareImageObject *imgObj = [[APShareImageObject alloc] init]; //imgObj.imageUrl = @"此处填充图片的url链接地址"; //图片也可使用imageData字段分享本地UIImage类型图片,必须填充有效的image NSData类型数据,否则无法正常分享 //例如 imgObj.imageData = UIImagePNGRepresentation(Your UIImage Obj); UIImage* image = [UIImage imageWithData:[NSData dataWithContentsOfFile:filePath]]; imgObj.imageData = UIImageJPEGRepresentation(image,0.5);// UIImagePNGRepresentation(image); // 回填 APMediaMessage 的消息对象 message.mediaObject = imgObj; // 创建发送请求对象 APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init]; // 填充消息载体对象 request.message = message; // 分享场景,0为分享到好友,1为分享到生活圈;支付宝9.9.5版本至当前版本,分享入口已合并,scene参数并没有被使用,用户会在跳转进支付宝后选择分享场景(好友、动态、圈子等),但为保证老版本上无问题,建议还是照常传入。 //request.scene = 0; // 发送请求 BOOL result = [APOpenAPI sendReq:request]; if (!result) { //失败处理 NSLog(@"shareImageToZFB发送失败"); }}//支付宝分享网页链接+ (void)shareURLToZFB:(NSDictionary *)dict{ NSString *url = [dict objectForKey:@"url"]; NSString *title = [dict objectForKey:@"title"]; NSString *description = [dict objectForKey:@"description"]; // lua回调函数 int scriptHandler = [[dict objectForKey:@"scriptHandler"] intValue]; if (_authCodeScriptHandler) { cocos2d::LuaBridge::releaseLuaFunctionById(_authCodeScriptHandler); } _authCodeScriptHandler = scriptHandler; // 创建消息载体 APMediaMessage 对象 APMediaMessage *message = [[APMediaMessage alloc] init]; message.title = title; message.desc = description; // 此处填充缩略图data数据,例如 UIImagePNGRepresentation(UIImage对象) // 此处必须填充有效的image NSData类型数据,否则无法正常分享 // UIImage *appIcon = [UIImage imageNamed:@"icon.png"]; // message.thumbUrl = @"https://tfsimg.alipay.com/images/openhome/TB1wH8IXl9m.eJkUuGVwu1RoFXa.png"; UIImage *appIcon = [UIImage imageNamed:@"icon.png"]; message.thumbData = UIImagePNGRepresentation(appIcon); // 创建网页类型的消息对象 APShareWebObject *webObj = [[APShareWebObject alloc] init]; webObj.wepageUrl = url; // 回填 APMediaMessage 的消息对象 message.mediaObject = webObj; // 创建发送请求对象 APSendMessageToAPReq *request = [[APSendMessageToAPReq alloc] init]; // 填充消息载体对象 request.message = message; // 分享场景,0为分享到好友,1为分享到生活圈;支付宝9.9.5版本至现在版本,分享入口已合并,这个scene并没有被使用,用户会在跳转进支付宝后选择分享场景(好友、动态、圈子等),但为保证老版本上无问题、建议还是照常传入 //request.scene = 0; // 发送请求 BOOL result = [APOpenAPI sendReq:request]; if (!result) { //失败处理 NSLog(@"shareURLToZFB发送失败"); }}/*! @brief 检查支付宝是否已被用户安装 * * @return 支付宝已安装返回YES,未安装返回NO。 */+(BOOL) isAPAppInstalled{ return [APOpenAPI isAPAppInstalled];}/*! @brief 判断当前支付宝的版本是否支持OpenApi * * @return 支持返回YES,不支持返回NO。 */+(BOOL) isAPAppSupportOpenApi{ return [APOpenAPI isAPAppSupportOpenApi];}/*! @brief 判断当前支付宝的版本是否支持分享到生活圈 * * @return 支持返回YES,不支持返回NO。 */+(BOOL) isAPAppSupportShareTimeLine{ return [APOpenAPI isAPAppSupportShareTimeLine];}
APOpenAPI.h
#import <Foundation/Foundation.h>#import "APOpenAPIObject.h"#pragma mark - APOpenAPIDelegate/*! @brief 接收并处理来自支付宝终端程序的事件消息 * * 接收并处理来自支付宝终端程序的事件消息,期间支付宝界面会切换到第三方应用程序。 * APOpenAPIDelegate 会在handleOpenURL:delegate:中使用并触发。 */@protocol APOpenAPIDelegate <NSObject>@optional/*! @brief 收到一个来自支付宝的请求,第三方应用程序处理完后调用sendResp向支付宝发送结果 * * 收到一个来自支付宝的请求,异步处理完成后必须调用sendResp发送处理结果给支付宝。 * @param req 具体请求内容 */-(void) onReq:(APBaseReq*)req;/*! @brief 发送一个sendReq后,收到支付宝的回应 * * 收到一个来自支付宝的处理结果。调用一次sendReq后会收到onResp。 * @param resp具体的回应内容 */-(void) onResp:(APBaseResp*)resp;@end
要继承此类
补充说明
部分目录
增加白名单
Info->LSApplicationQueriesSchemes下增加alipayshare和alipay这两项
阅读全文
0 0
- [ObjectC]分享到支付宝iOS接入
- iOS接入支付宝支付
- iOS接入支付宝
- iOS支付宝支付(Alipay)详细接入
- iOS App接入支付宝SDK
- iOS 支付宝接入报错
- iOS 接入微信 支付宝 参数设置
- iOS 支付宝好友分享
- ios支付宝sdk分享
- 分针网—每日分享:PHP接入支付宝教程
- ios应用接入人人网(分享到人人网)
- iOS接入支付宝支付(小白都能看懂的支付宝支付)
- iOS接入微信支付
- iOS微信支付接入
- Android支付接入:支付宝
- ReactNative接入支付宝支付
- 支付宝-APP支付接入
- ReactNative接入支付宝支付
- 使用Dockerfile搭建Apache
- 218. The Skyline Problem (最大堆)
- linux rm的使用与注意事项
- 【Java】多种方法实现读取键盘输入
- 5.8
- [ObjectC]分享到支付宝iOS接入
- Android集成zxing库后的一些坑
- MyBatis的discriminator鉴别器的作用
- Linux简介
- ajax遍历json数据(实现迭代效果),显示在网页
- Linux下导入SQL文件
- pandas的dataframe 条件查询
- 网易云音乐 抓取成功,按评论数排序
- java小弟