You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native集成Zendesk认证时Objective-C端JWT传参问题

React Native 桥接Zendesk JWT认证实现方案

Zendesk Chat的认证模式要求提供遵守Zendesk认证协议的对象,SDK需要校验/拉取token时会主动调用该对象的getToken:方法,只需要在这个方法里把从自有服务端拿到的JWT通过回调传给SDK即可。


第一步:实现自定义RCTAuthJWT类

官方给出的代码是协议模板,需要自行创建RCTAuthJWT类,让它持有外部传入的token,可以直接把这段代码放在桥接文件顶部,也可以单独新建类文件存放:

// 引入Zendesk相关头文件,根据自己集成的版本调整路径即可
#import <ZDCChat/ZDCChat.h>
#import <ZendeskSDK/ZendeskSDK.h>

@interface RCTAuthJWT : NSObject <ZDKJwtAuthenticator>
// 新增属性存储从RN端传入的token
@property (nonatomic, copy) NSString *jwtToken;
@end

@implementation RCTAuthJWT
- (void)getToken:(void (^)(NSString * _Nullable, NSError * _Nullable))completion {
    // 直接把持有的token通过回调传给SDK,无错误时error参数传nil
    if (self.jwtToken) {
        completion(self.jwtToken, nil);
    } else {
        // token不存在时返回自定义错误
        NSError *err = [NSError errorWithDomain:@"com.yourapp.zendesk" code:-1 userInfo:@{NSLocalizedDescriptionKey: @"JWT token不存在"}];
        completion(nil, err);
    }
}
@end

如果业务需要支持token过期自动刷新,可以直接在getToken方法内添加请求自有服务端刷新token的逻辑,拿到新token后再调用completion即可,不需要额外触发SDK其他方法。


第二步:修改RN桥接setUserIdentity方法

原有代码的问题是创建RCTAuthJWT实例后,没有把从RN端拿到的token赋值给实例,补上赋值逻辑即可正常运行:

RCT_EXPORT_METHOD(setUserIdentity: (NSDictionary *)user) {
  if (user[@"token"]) {
    NSString *jwtToken = user[@"token"];
    // 给Zendesk核心SDK设置JWT身份
    id<ZDKObjCIdentity> userIdentity = [[ZDKObjCJwt alloc] initWithToken:jwtToken];
    [[ZDKZendesk instance] setIdentity:userIdentity];
    
    // 初始化认证器并传入token
    RCTAuthJWT *authenticator = [RCTAuthJWT new];
    authenticator.jwtToken = jwtToken;
    // 给Chat模块绑定认证器
    [ZDKChat.instance setIdentityWithAuthenticator:authenticator];
    
  } else {
    // 匿名模式逻辑无需改动
    id<ZDKObjCIdentity> userIdentity = [[ZDKObjCAnonymous alloc] initWithName:user[@"name"]
                                          email:user[@"email"]];
    [[ZDKZendesk instance] setIdentity:userIdentity];
  }
}

关键注意点

  • 不要在getToken:方法内写死token,必须通过属性持有从RN端传入的、自有服务端生成的有效JWT
  • setIdentityWithAuthenticator:必须在打开Zendesk聊天界面之前调用,否则身份配置不会生效
  • 切换账号(匿名切认证/切换不同认证用户)时,需要先调用Zendesk登出方法清空旧身份,再重新调用setUserIdentity传入新用户信息,避免身份串号

内容的提问来源于stack exchange,提问作者Nicks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 22:03:22