微信登录有客户端和无客户端杂谈

时间:2016-10-15 19:07:50   收藏:0   阅读:359

最近在做微信登录相关的操作,本来app是无微信状态下直接提示没有微信不能登录的,但是苹果审核的时候给打回了,说我们微信登录要在无微信状态下也可以使用。懵比。

We were still required to install the WeChat app before we can log-in via WeChat. The user should be able to log-in and access their account, without requiring additional applications to be installed.

Next Steps

If you choose to allow users to log-in via WeChat, please use methods that can authenticate users from within your app, such as a native web-view.

废话不多说,直接开始解决。

talk is cheap       show me the code

首先,有客户端的情况下正常登录,没什么好说的,

第一步,下载微信sdk。在这里我们直接使用微信sdk,而不是借助友盟等其他第三方服务。

第二步,导入相应的开发包到你的项目中,这个会在下载的官方demo中有,一个个导进去就好了

这两步搞好,其他就看文档吧,写的很详细。

在这里要注意一个点,使用微信SDK时,如果出现这种错误 "operator new[](unsigned long)", referenced from:"

是微信sdk的问题,找不到对应的编译包,把libc++这个导入就ok了

下面就是重点了,在看文档的时候,微信给了我一个很无语的介绍:

1、目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。
2、对于Android应用,建议总是显示微信登录按钮,当用户手机没有安装微信客户端时,请引导用户下载安装微信客户端。
3、对于iOS应用,考虑到iOS应用商店审核指南中的相关规定,建议开发者接入微信登录时,先检测用户手机是否已安装微信客户端(使用sdk中isWXAppInstalled函数 ),
  对未安装的用户隐藏微信登录按钮,只提供其他登录方式(比如手机号注册登录、游客登录等)

就是上面这个介绍让我懵比。后来去网上搜了一下,然后再看看WXApi.h这个头文件,发现里面有一个方法

/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
 *
 * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
 * @param req 具体的发送请求,在调用函数后,请自己释放。
 * @param viewController 当前界面对象。
 * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。
 * @return 成功返回YES,失败返回NO。
 */
+(BOOL) sendAuthReq:(SendAuthReq*)req viewController:(UIViewController*)viewController delegate:(id<WXApiDelegate>)delegate;

 这就是福音。

不说话,直接调用。

    SendAuthReq* req =[[SendAuthReq alloc ] init];
    req.scope = @"snsapi_userinfo";
    req.state = start;
    
    [WXApi sendAuthReq:req viewController:self delegate:[WXApiManager sharedManager]];

在这里,需要有一点注意。req.scope = @"snsapi_userinfo",这个是固定的。

我的这份代码中,微信登录有客户端的时候写的是

   SendAuthReq* req =[[SendAuthReq alloc ] init];
   req.scope = @"snsapi_userinfo, snsapi_base";
   req.state = start;
   [WXApi sendReq:req];

我就偷个懒吧下面换掉了,结果很长时间都是调不出来,就是没反应。后来逐一检查,才发现这个问题。

注意,无客户端情况下登录,req.scope = @"snsapi_userinfo",这样写就够了

这是其一。

其二,还是无客户端情况下。我这边在做的时候还有一个是微信绑定,作用就是把微信跟公司自己的帐号系统绑定在一块,这样做就是以后微信登录我们这边也就是相当于帐号登录,帐号对公司业务有影响,这个就不多说了。

做的时候我把调用的代码加了一个判断就丢到一个控制器的viewDidLoad中了,但是每次点击绑定的时候,这玩意弹出来显示一片空白,就是没有内容。

代码一摸一样的,我就想应该是加载的问题,就把调用代码放在viewDidAppear中,果然可以。

所以在这个地方也有一个注意点,微信登录调用的时候需要控制器加载完成后.


以上就是我在做的时候碰到的一些小问题,希望对大家有些许的帮助

 转载请注明出处

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!