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

来源:互联网 发布:名字壁纸制作软件 编辑:程序博客网 时间:2024/05/10 10:17

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