ios应用接入微信开放平台

前几天试了一下服务端接入微信公众平台,昨天又看了一下APP接入开放平台ios

开放平台和公众平台的差异

公众平台针对的是公众帐号,除了提供管理后台以外。也开放了若干接口,让微信server和开发人员本身的应用系统能够对接web

开放平台是微信的整体接入方式。不局限于公众帐号(订阅号,服务号)。移动APP和web应用也可以经过开放平台。实现与微信对接。可以说,公众平台的API部分,是开放平台的一个子集xcode

开放平台大致上分为3个部分。分别针对移动APP,WEB应用。公众帐号的接入微信

移动APP接入开放平台的做用

眼下,移动APP接入微信开放平台后,可以得到下面的特性:app

一、向微信好友发消息微信公众平台

二、发消息到朋友圈微信支付

三、收藏内容到“个人收藏”url

四、用微信帐号登录APP。得到微信帐号的信息code

五、支持微信支付orm

在朋友圈可以看到一个消息后面跟着“来自XXX”,这就是XXX应用接入开放平台后获得的能力

ios app接入方式

流程和代码都不复杂,详细方法请看开放平台官网。本文不赘述。仅仅提醒一点,需要在xcode里配置你本身APP的URL Type,URL Schemas需要填写微信开放平台提供的那个app id。假设漏掉了这一步,同样可以发消息到微信,但是发完消息之后就没法从微信再跳转回你的APP了,因为微信client也是经过openURL方法。跳回你的APP。需要你的APP本身注冊上URL Schemas

对接微信的原理

首先,一个大的限制是,APP不可能经过微信提供的SDK。直接把消息发到微信server上。

而是从开发人员的APP中,打开微信应用。而后仍是由微信把消息发出去,再跳回开发人员本身的APP。也就是说,APP和微信的交互,是经过应用间跳转来完毕的,因此核心仍是iOS的这2个方法:

- (BOOL)openURL:(NSURL*)url;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

发送消息的代码是:

[WXApi sendReq:req];

微信SDK固然不是开源的,因此从这行代码咱们看不出什么。

但是很是easy想到。跳转到还有一个app的方式在iOS中就是openURL方法。因此这行代码作的事情,相似于:

NSString *weixinURL = @"weixin_schema://app_id?title=xxx&content=xxx";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:weixinURL]];

经过weixin_schema,打开了机器上安装的微信应用。在URL末尾加入了相关參数。微信解析后处理。而后在微信里把消息发出去之后,微信也会调用openURL,又回到了开发人员本身的APP:

URL地址是,wx_xxxxxxxxxxx://platformId=wechat

这个URL被AppDelegate中的这种方法拦截:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [WXApi handleOpenURL:url delegate:self];
}

而后handleOpenURL方法调用了:

-(void) onResp:(BaseResp*)resp
{
    NSString *strTitle = [NSString stringWithFormat:@"发送消息结果"];
    NSString *strMsg = [NSString stringWithFormat:@"errcode: %d", resp.errCode];
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}

整个交互的原理就是这样。详细到对接的代码里,主要是2个流程:

一、应用主动发消息给微信。应用调用sendReq方法,而后在onResp方法里处理微信的响应

二、微信发消息给应用。

应用在onReq里处理微信的请求。而后调用sendResp方法发响应到微信

而后这2个流程里用到的參数,都是微信SDK里提供的封装类,如SendMessageToWXReq,WXMediaMessage等

对接微信的限制

如上所述,由于SDK并无提供应用直接发送请求到微信server的能力,而仅仅能带參数跳转到微信APP,因此接入的限制仍是比較大的。很是多事情都作不了。

比方说。用户的设备上必定要装有微信,而且已经处于登录状态。所以很是多for iPad的APP。就很是难对接微信。因为会在iPad上安装微信的用户是很是少的,通常都是装在手机上

还有,也没法实现在本身的APP里选定用户发送,仅仅能是编辑好内容,跳到微信里,在微信通信录里选要发送的好友

也不能依据手机号。直接向微信帐号发送申请加为好友的请求

……

虽然如此,对接微信以后,对APP的社交传播仍是有较大的价值,因此现在可以看到大部分的APP。都有接入微信的功能

相关文章
相关标签/搜索