增量授权
当第三方应用调用某个API接口时,如果服务器返回操作未被授权,则会触发增量授权逻辑。第三方应用需自行实现tencentNeedPerformIncrAuth:withPermissions:协议接口才能够进入增量授权逻辑,否则默认第三方应用放弃增量授权。示例如下:
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions: (NSArray *) permissions { // incrAuthWithPermissions是增量授权时需要调用的登录接口 // permissions是需要增量授权的权限列表 [tencentOAuth incrAuthWithPermissions:permissions]; // 返回NO表明不需要再回传未授权API接口的原始请求结果,否则返回YES return NO; } |
注意:在用户通过增量授权页重新授权登录后,第三方应用需更新自己维护的token及有效期限等信息。
用户在增量授权时是可以更换帐号进行登录的,强烈要求第三方应用核对增量授权后的用户openid是否一致,以添加必要的处理逻辑(用户帐号变更需重新拉取用户的资料等信息)
增量授权成功时,会通过tencentDidUpdate:协议接口通知第三方应用:
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth { _labelTitle.text = @"增量授权完成"; if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length]) { // 在这里第三方应用需要更新自己维护的token及有效期限等信息 // **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息** _labelAccessToken.text = tencentOAuth.accessToken; } else { _labelAccessToken.text = @"增量授权不成功,没有获取accesstoken"; } } |
增量授权失败时,会通过tencentFailedUpdate:协议接口通知第三方应用:
- (void)tencentFailedUpdate:(UpdateFailType)reason { switch (reason) { case kUpdateFailNetwork: _labelTitle.text=@"增量授权失败,无网络连接,请设置网络"; break; case kUpdateFailUserCancel: _labelTitle.text=@"增量授权失败,用户取消授权"; break; case kUpdateFailUnknown: default: _labelTitle.text=@"增量授权失败,未知错误"; break; } } |