ios微信回调函数实现的函数只能在appdele里面实现么

An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check
for details.
Faithfully yours, tengine.An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check
for details.
Faithfully yours, tengine.基于第三方微信授权登录的iOS代码分析
基于第三方的微信授权登录是之前笔者博文《QQ和新浪微博授权登录》的姊妹篇,微信已经深入到每一个APP的缝隙,最常用的莫过分享和登录了,接下来就以代码的形式来展开微信登录的相关说明,至于原理级别的oauth2.0认证体系请参考微信开放平台的相关说明和图示 https://open./
三,微信登录授权开发:
1,到微信开发平台注册相关APP,现在是等待审核成功后才能获取到对应的key和secret;获取成功后需要单独申请开通登录和支付接口,如图
2,和QQ类似,需要填写Url Schemes,如demo中的wxd930ea5d5a258f4f ,然后引入相应framework;
3,在AppDelegate中注册和实现授权后的回调函数,代码如下:
//向微信注册
[WXApi registerApp:kWXAPP_ID withDescription:@weixin];
//授权后回调 WXApiDelegate
-(void)onResp:(BaseReq *)resp
ErrCode ERR_OK = 0(用户同意)
ERR_AUTH_DENIED = -4(用户拒绝授权)
ERR_USER_CANCEL = -2(用户取消)
code 用户换取access_token的code,仅在ErrCode为0时有效
state 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传,state字符串长度不能超过1K
lang 微信客户端当前语言
country 微信用户当前国家信息
SendAuthResp *aresp = (SendAuthResp *)
if (aresp.errCode== 0) {
NSString *code = aresp.
NSDictionary *dic = @{@code:code};
//和QQ,新浪并列回调句柄
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [TencentOAuth HandleOpenURL:url] ||
[WeiboSDK handleOpenURL:url delegate:self] ||
[WXApi handleOpenURL:url delegate:self];;
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [TencentOAuth HandleOpenURL:url] ||
[WeiboSDK handleOpenURL:url delegate:self] ||
[WXApi handleOpenURL:url delegate:self];;
4,微信登录授权比较复杂,相比QQ,新浪多了几步,简单说就是需要三步,第一步,获取code,这个用来获取token,第二步,就是带上code获取token,第三步,根据第二步获取的token和openid来获取用户的相关信息;
下面用代码来实现:
第一步:code
- (IBAction)weixinLogin:(id)sender
[self sendAuthRequest];
-(void)sendAuthRequest
SendAuthReq* req =[[SendAuthReq alloc ] init];
req.scope = @snsapi_userinfo,snsapi_
req.state = @0744 ;
[WXApi sendReq:req];
这里获取后会调用之前在AppDelegate里面的对应oauthResp回调,获得得到的code。
第二步:token和openid
-(void)getAccess_token
//https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
NSString *url =[NSString stringWithFormat:@https://api./sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code,kWXAPP_ID,kWXAPP_SECRET,self.wxCode.text];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
access_token = OezXcEiiBSKSxW0eoylIeJDUKD6z6dmr42JANLPjNN7Kaf3e4GZ2OncrCfiKnGWiusJMZwzQU8kXcnT1hNs_ykAFDfDEuNp6waj-bDdepEzooL_k1vb7EQzhP8plTbD0AgR8zCRi1It3eNS7yRyd5A;
expires_in = 7200;
openid = oyAaTjsDx7pl4Q42O3sDzDtA7gZs;
refresh_token = OezXcEiiBSKSxW0eoylIeJDUKD6z6dmr42JANLPjNN7Kaf3e4GZ2OncrCfiKnGWi2ZzH_XfVVxZbmha9oSFnKAhFsS0iyARkXCa7zPu4MqVRdwyb8J16V8cWw7oNIff0l-5F-4-GJwD8MopmjHXKiA;
scope = snsapi_userinfo,snsapi_
self.access_token.text = [dic objectForKey:@access_token];
self.openid.text = [dic objectForKey:@openid];
利用GCD来获取对应的token和openID.
第三步:userinfo
-(void)getUserInfo
// https://api./sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
NSString *url =[NSString stringWithFormat:@https://api./sns/userinfo?access_token=%@&openid=%@,self.access_token.text,self.openid.text];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
country = CN;
headimgurl = /mmopen/FrdAUicrPIibcpGzxuD0kjfn2klwzQ62a1brlWq1sjNfWREia6W8Cf8kNCbErowsSUcGSIltXTqrhQgPEibYakpl5EokGMibMPU/0;
language = zh_CN;
nickname =
openid = oyAaTjsDx7pl4
privilege =
province = B
unionid = oyAaTjsxxxxxxQ42O3
self.nickname.text = [dic objectForKey:@nickname];
self.wxHeadImg.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dic objectForKey:@headimgurl]]]];
执行到这一步就算完成了整个授权登录的功能,能把昵称和头像显示出来,剩下的就是及时刷新你的token,详情可参考开发文档。
下面是登录成功后的QQ,新浪微博,微信的真机运行成功截图:
评价:微信的开发文档相比容易理解和调试,虽然没有demo,但是文档比较详细,所以可以在一定程度上减轻了开发的困难,但是相比之下微信的授权步骤比较麻烦,需要三步才能彻底获取用户信息,这点没有QQ和新浪微博简洁,需要有一定的和代码功底,希望能给大家带来帮助。
后记:微信授权登录是对QQ和新浪微博登录的姊妹篇,前两者登录代码分析请参考上一篇博文,如需三种登录方式的demo源代码,该demo只需换掉默认宏定义和Url Schemes中默认的key即可正式使用,详情请发Email: ,特别注意代码不免费提供,需要支付一定金额,谢谢合作!Pages: 1/2
主题 : 点击左上角返回***的功能会在返回app里面调用什么方法代理方法
级别: 新手上路
可可豆: 64 CB
威望: 64 点
在线时间: 149(时)
发自: Web Page
来源于&&分类
点击左上角返回***的功能会在返回app里面调用什么方法代理方法&&&
如题:点击左上角返回***的功能会在返回app里面调用什么方法代理方法 点击的按钮就是如图片左上角所示,它返回的app回调用那个app的代理里面哪个方法
图片:21_ab.jpg
级别: 骑士
UID: 28451
可可豆: 3571 CB
威望: 2274 点
在线时间: 1767(时)
发自: Web Page
这个用ibaction不就得了
级别: 侠客
可可豆: 246 CB
威望: 246 点
在线时间: 544(时)
发自: Web Page
是不是想问popoverPresentationController?
级别: 精灵王
UID: 496016
可可豆: 2195 CB
威望: 1709 点
在线时间: 910(时)
发自: Web Page
导航栏的leftBarButtonItem的点击事件,默认是popViewController
你好,旅行者
级别: 新手上路
可可豆: 64 CB
威望: 64 点
在线时间: 149(时)
发自: iPhone
图片上传错了,不是那个按钮,是ios9多出来的功能,左上角返回app的按钮,点击那个按钮返回到那个app,在那个app里面会被哪个代理方法监听到
级别: 新手上路
UID: 454027
可可豆: 55 CB
威望: 50 点
在线时间: 247(时)
发自: Web Page
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url ;- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
/users/52fa8d353bc0/latest_articles
级别: 新手上路
可可豆: 64 CB
威望: 64 点
在线时间: 149(时)
发自: Web Page
回 5楼(ekguid) 的帖子
我打了断点不进去这两个方法的。我在微信支付完成后点击左上角返回app的按钮 是不会触发这两个方法。
级别: 新手上路
可可豆: 2 CB
威望: 2 点
在线时间: 9(时)
发自: Web Page
楼主问题解决了没?也遇到这个问题了,也是做微信支付...
级别: 骑士
UID: 317836
可可豆: 912 CB
威望: 709 点
在线时间: 616(时)
发自: Web Page
回 7楼(tiantiankaixin) 的帖子
进入后台、进入前台两个代理方法
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 2(时)
发自: Web Page
这个快捷的返回……,其实就是你按home然后再点你应用的图标而已。没有特殊的作用。除非是点微信那边的某个按钮,跳转到你的应用,能通过 openurl 捕获。所以,ios 9多出来的那个功能,只是方便用户的,跟开发者没鸟关系。
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版}

我要回帖

更多关于 java 回调函数实现 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信