iOS 支付宝好友分享

来源:互联网 发布:网络使用安全管理制度 编辑:程序博客网 时间:2024/04/29 14:07

此文来自支付宝分享接入文档,详情查询支付宝开发者平台

---

### 1.1 iOS客户端DEMO结构


``` 

APSocialSDKDemo

| APSocialSDKDemo 文件夹 Demo源码文件夹

| Framework 文件夹 存放第三方库

| SocialSDK 文件夹 存放支付宝分享库资源

| APOpenAPI.h 分享接口头文件

| APOpenAPIObject.h分享数据模型头文件

| libAPOpenSdk.a分享静态库

| README.md 说明文件

| AppDelegate.hApp启动委托头文件

| AppDelegate.m实现分享注册、响应回调等逻辑

| APRootViewController.h根视图控制器头文件

| APRootViewController.m实现分享文本、图片、网页逻辑

| Images.xcassets图片资源管理工具,系统自带

| SupportingFiles文件夹项目配置管理,系统自带

| Products 文件夹 编译结果,系统自带

```


---

### 1.2 DEMO文件核心代码

* 接入文件核心代码

* 发送消息核心代码


---

### 1.3 IOS集成

#### 准备工作


* 申请你的AppID。请到支付宝开放平台应用登记页面进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。

* 下载并解压接口压缩文件(文件名是SocialSDK.zip)。


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


```

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`**

按如下形式添加即可:

```

<key>LSApplicationQueriesSchemes</key>

<array>

<string>alipay</string>

<string>alipayshare</string>

</array>

```


#### 步骤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内的示例代码。**

0 0
原创粉丝点击