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

来源:互联网 发布:蘑菇街打单软件 编辑:程序博客网 时间:2024/05/21 00:55

      API说明

       类说明: 

        微信分享sdk文件:libWeChatSDK.a , WXApi.h , WXApiObject.h
        WXApi.h文件内容主要是调用微信分享的相关方法、接口;
// WXApi.h 文件  主要方法+(BOOL) registerApp:(NSString *)appid withDescription:(NSString *)appdesc;/*! @brief 处理微信通过URL启动App时传递的数据 */+(BOOL) handleOpenURL:(NSURL *) url delegate:(id<WXApiDelegate>) delegate;/*! @brief 检查微信是否已被用户安装 */+(BOOL) isWXAppInstalled;/*! @brief 判断当前微信的版本是否支持OpenApi*/+(BOOL) isWXAppSupportApi;/*! @brief 获取微信的itunes安装地址*/+(NSString *) getWXAppInstallUrl;/*! @brief 获取当前微信SDK的版本号 */+(NSString *) getApiVersion;/*! @brief 打开微信*/+(BOOL) openWXApp;+(BOOL) sendReq:(BaseReq*)req;+(BOOL) sendResp:(BaseResp*)resp;
        WXApiObject.h文件内容主要是app跟微信通信时,请求、回应时的信息对象。       
// 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多媒体消息中包含的网页数据对象

        具体参考网址:微信开放平台中的分享收藏功能,ios开发手册。

     使用过程

       准备过程: 

       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];}// 其他格式内容回复类似上文,只不过对象不同
  
2 1