iOS:开放平台引用(二)--微信分享

iOS:开放平台引用(二)--微信分享,有需要的朋友可以参考下。


API说明 类说明:
微信分享sdk文件:libWeChatSDK.a , WXApi.h , WXApiObject.h
WXApi.h文件内容主要是调用微信分享的相关方法、接口;
WXApiObject.h文件内容主要是app跟微信通信时,请求、回应时的信息对象。
具体参考网址: 微信开放平台中的分享收藏功能, ios开发手册
// WXApiObject.h 文件对象
BaseReq	               该类为微信终端SDK所有请求类的基类
BaseResp	       该类为微信终端SDK所有响应类的基类
GetMessageFromWXReq	微信终端向第三方程序请求提供内容请求类型。
GetMessageFromWXResp	微信终端向第三方程序请求提供内容,第三方程序向微信终端返回处理结果类型。
LaunchFromWXReq	        微信终端打开第三方程序请求类型
SendMessageToWXReq	第三方程序发送消息至微信终端程序的接口
SendMessageToWXResp	第三方程序发送SendMessageToWXReq至微信,微信处理完成后返回的处理结果类型。
ShowMessageFromWXReq	微信通知第三方程序,要求第三方程序显示的消息结构体。
ShowMessageFromWXResp	微信通知第三方程序,要求第三方程序显示或处理某些消息,第三方程序处理完后向微信终端发送的处理结果。
WXApi	                微信Api接口函数类
<WXApiDelegate>	接收并处理来自微信终端程序的事件消息
WXAppExtendObject	多媒体消息中包含的App扩展数据对象
WXEmoticonObject	多媒体消息中包含的表情数据对象
WXFileObject	多媒体消息中包含的文件数据对象
WXImageObject	多媒体消息中包含的图片数据对象
WXMediaMessage	多媒体消息结构体
WXMusicObject	多媒体消息中包含的音乐数据对象
WXVideoObject	多媒体消息中包含的视频数据对象
WXWebpageObject	多媒体消息中包含的网页数据对象
使用过程
准备过程:
1.登记并选择移动应用进行设置后,将获得AppID
2.下载相关sdk文件、添加到项目中(注:如果使用XCode 4.3及以下版本,使用libWeChatSDK.a;如果使用XCode 4.5及以上版本,使用libWeChatSDK_armv7_v7s.a);
3.设置项目的URL Scheme,详见 《respond to a custom URL scheme》
代码调用: 
a.向微信注册: 
   [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];
说明:
1.在做微信、微博分享时,需要先想他们官方申请AppKey,AppKey对他们来说,就相当iOS里的UDID一样,是他们唯一区分注册了的应用的key,微信或微博官方可以通过AppKey可以查询所注册的App的信息;
2.这段代码,其作用是告诉微信是这个AppKey相关联的应用发起的分享,同时它的另一个作用就相当于在系统里面注册一个地址,别的应用可以通过这个地址打开这个应用;就像微信分享成功以后回调到自己的应用,就是通过这个AppKey回调的;
b.处理微信通过URL启动App时传递的数据
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL isSuc = [WXApi handleOpenURL:url delegate:self];
    NSLog(@"url %@ isSuc %d",url,isSuc == YES ? 1 : 0);
    return  isSuc;
}
说明:
--[WXApi handleOpenURL:url delegate:self]; 中delegate,<WXApiDelegate>对象,用来接收微信触发的消息;
--这方法在app发送信息到微信,或者微信求情app,都用到,必须实现;
c.app---->微信
1.分享到会话/朋友圈/收藏
// 2. 分享到不同场景,对应SendMessageToWXReq不同场景scene  
WXSceneSession = 0, //回话
WXSceneTimeline = 1, //朋友圈
WXSceneFavorite = 2, //收藏
2.分享内容到微信,
对象:发送:SendMessageToWXReq + WX...Object,回复:SendMessageToWXResp
方法:发送:sendReq: 回复:onResp
// 1. 向微信分享内容对象是SendMessageToWXReq 、分享完收到回复的是对象SendMessageToWXResp
//  例子.分享文本到朋友圈
- (void) sendTextContent
{
SendMessageToWXReq* req = [[[SendMessageToWXReq alloc] init]autorelease];
req.text = @"文本内容";
req.bText = YES;
req.scene = _scene;

[WXApi sendReq:req];
}
// 例子 分享图片到朋友圈
WXMediaMessage *message = [WXMediaMessage message];
[message setThumbImage:[UIImage imageNamed:@"res5thumb.png"]];

WXImageObject *ext = [WXImageObject object];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"res5thumb" ofType:@"png"];
ext.imageData = [NSData dataWithContentsOfFile:filePath];
UIImage* image = [UIImage imageWithData:ext.imageData];
ext.imageData = UIImagePNGRepresentation(image);
message.mediaObject = ext;

SendMessageToWXReq* req = [[[SendMessageToWXReq alloc] init]autorelease];
req.bText = NO;
req.message = message;
req.scene = _scene;

[WXApi sendReq:req];
}
// 分享其他类型内容,只是把WXImageObject 换成WXWebpageObject(链接)、WXMusicObject、WXVideoObject……等

// 微信回复
// 微信操作完,app收到的回复,SendMessageToWXResp对象
-(void) onResp:(BaseResp*)resp
{
if([resp isKindOfClass:[SendMessageToWXResp class]])
{
NSString *strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
}
d.微信---->app
在使用微信聊天的过程中我们会发现,当你通过“加号”呼出更多功能时,界面会出现更多操作导航,然而最后一个按钮并非某是个功能,而是添加操作,通过该功能你可以添加更多第三方平台工具,例如熟悉的大众点评,团购大全,爱奇艺,墨迹天气等,添加后你可以直接在微信中快速跳转(目前版本的微信没有发现这种跳转到别的app功能)
1.处理收到来自微信的请求:
方法:onReq收到微信请求,若需要回复之后调用sendResp
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (alertView.tag == 1000) {
        RespForWeChatViewController* controller = [[RespForWeChatViewController alloc]autorelease];
        controller.delegate = self;
        [self.viewController presentModalViewController:controller animated:YES];
    }
}
    if([req isKindOfClass:[GetMessageFromWXReq class]])
    {
        // 微信请求App提供内容, 需要app提供内容后使用sendRsp返回
        NSString *strTitle = [NSString stringWithFormat:@"微信请求App提供内容"];
        NSString *strMsg = @"微信请求App提供内容,App要调用sendResp:GetMessageFromWXResp返回给微信";
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        alert.tag = 1000;
        [alert show];
        [alert release];
    }
    else if([req isKindOfClass:[ShowMessageFromWXReq class]])
    {
        ShowMessageFromWXReq* temp = (ShowMessageFromWXReq*)req;
        WXMediaMessage *msg = temp.message;
        
        //显示微信传过来的内容
        WXAppExtendObject *obj = msg.mediaObject;
        
        NSString *strTitle = [NSString stringWithFormat:@"微信请求App显示内容"];
        NSString *strMsg = [NSString stringWithFormat:@"标题:%@ \n内容:%@ \n附带信息:%@ \n缩略图:%u bytes\n\n", msg.title, msg.description, obj.extInfo, msg.thumbData.length];
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release]; 
    }
    else if([req isKindOfClass:[LaunchFromWXReq class]])
    {
        //从微信启动App
        NSString *strTitle = [NSString stringWithFormat:@"从微信启动"];
        NSString *strMsg = @"这是从微信启动的消息";
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
3.回复微信请求:
对象:请求: GetMessageFromWXReq,回复:GetMessageFromWXResp+ WX...Objec
方法:请求:onReq: 回复:sendResp
-(void) RespTextContent
{
    GetMessageFromWXResp* resp = [[[GetMessageFromWXResp alloc] init] autorelease];
    resp.text = @"文本内容";
    resp.bText = YES;
    
    [WXApi sendResp:resp];
}
- (void) RespImageContent
{
    WXMediaMessage *message = [WXMediaMessage message];
    [message setThumbImage:[UIImage imageNamed:@"res5thumb.png"]];
    
    WXImageObject *ext = [WXImageObject object];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"res5thumb" ofType:@"png"];
    ext.imageData = [NSData dataWithContentsOfFile:filePath];
    message.mediaObject = ext;
    
    GetMessageFromWXResp* resp = [[[GetMessageFromWXResp alloc] init] autorelease];
    resp.message = message;
    resp.bText = NO;
    
    [WXApi sendResp:resp];
}
// 其他格式内容回复类似上文,只不过对象不同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值