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

      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) 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接口函数类
	接收并处理来自微信终端程序的事件消息
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,对象,用来接收微信触发的消息 ;
--这方法在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];
}
// 其他格式内容回复类似上文,只不过对象不同
  

你可能感兴趣的:(iOS)