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

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

公众平台针对的是公众账号,除了提供管理后台之外。也开放了若干接口,让微信server和开发人员自己的应用系统可以对接

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

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

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

眼下,移动APP接入微信开放平台后,能够获得下面的特性:

1、向微信好友发消息

2、发消息到朋友圈

3、收藏内容到“我的收藏”

4、用微信账号登陆APP。获得微信账号的信息

5、支持微信支付

在朋友圈能够看到一个消息后面跟着“来自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个流程:

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

2、微信发消息给应用。

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

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

对接微信的限制

如上所述,因为SDK并没有提供应用直接发送请求到微信server的能力,而仅仅能带參数跳转到微信APP,所以接入的限制还是比較大的。非常多事情都做不了。

比方说。用户的设备上一定要装有微信,并且已经处于登陆状态。因此非常多for iPad的APP。就非常难对接微信。由于会在iPad上安装微信的用户是非常少的,一般都是装在手机上

还有,也无法实如今自己的APP里选定用户发送,仅仅能是编辑好内容,跳到微信里,在微信通讯录里选要发送的好友

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

……

虽然如此,对接微信之后,对APP的社交传播还是有较大的价值,所以如今能够看到大部分的APP。都有接入微信的功能

ios应用接入微信开放平台的更多相关文章

  1. Android App接入微信开放平台注意事项

    一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk ...

  2. 友盟分享——Android App接入微信开放平台注意事项

    一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk ...

  3. EasyWeChat微信开放平台第三方平台接入

    EasyWeChat微信开放平台第三方平台接入 https://www.cnblogs.com/bainiu/p/8022729.html

  4. C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理

    在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...

  5. 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...

  6. 第三方平台正式支持接入微信公众平台JS-SDK

    之前微信公众平台面向开发者开放微信内网页开发工具包,现在第三方平台也能正式支持接入微信公众平台JS-SDK了,第三方平台可以在获得公众号的授权后,通过JS-SDK帮助公众号开发和实现网页业务. 公众号 ...

  7. phonegap与微信开放平台接口整合

    在开发phonegap应用的过程中有个需求需要将应用的消息推送到微信上.于是我自己写了一个微信的phonegap插件,并成功整合进了应用. 插件地址:https://github.com/ajccom ...

  8. 微信开放平台获取component_verify_ticket

    官方文档说明: 在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket.第三方平台方在收到ticket推送后也需进行 ...

  9. 1.Node.js 接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

随机推荐

  1. HDURevenge of Segment Tree(第二长的递增子序列)

    HDURevenge of Segment Tree(第二长的递增子序列) 题目链接 题目大意:这题是求第二长的递增子序列. 解题思路:用n^2的算法来求LIS,可是这里还要记录一下最长的那个序列是否 ...

  2. Fragment保持状态切换,fragment状态切换

    在使用Activity管理多个Fragment时,每次切换Fragment使用的是replace,结果导致出现xxx is not currently in the FragmentManager异常 ...

  3. textarea内容有换行时存入数据库丢失问题的解决 (转载)

    http://blog.csdn.net/zhang_j_h/article/details/44563167 存入: function GetInputData(id, cmd) { var pos ...

  4. SQL 根据时间和打印状态抽取记录

    1.首先要是没有打印的记录. 2.其次是要按照时间,时间是要按照倒序排列. 下载文件的URL and order by 上传时间 desc *是否打印,使用字段bit,0是没有打印,1是已经打印

  5. Servlet的学习之Filter过滤器技术(1)

    本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...

  6. HDU 4424 Conquer a New Region 最大生成树

    给你一颗树 每条边有一个权值 选择一个点为中心 定义S值为中心到其它n-1个点的路径上的最小边权 求全部点S值的和 从大到小排序 每次合并2棵树 设为A集合 B集合 设A集合的最大S值的和为sumA ...

  7. Selenium 出现: Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal

    webDriver 运行的时候出现: Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal 解决办法: 只 ...

  8. excel使用cube

  9. 部署Spring Boot应用

    在开发Spring Boot应用的过程中,Spring Boot直接执行public static void main()函数并启动一个内嵌的应用服务器(取决于类路径上的以来是Tomcat还是jett ...

  10. Android学习路线(二十四)ActionBar Fragment运用最佳实践

    转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...