常见问题

更新时间:2015/10/19 访问次数:39672

本文中给出开发者集成时遇到的常见问题,我们对问题所属的模块进行了标记,以便更快速的检索。

UI显示遇到问题

  • 头像和昵称如何设置【IMKit】
    • 解决方法:

      • 当IMSDK需要显示头像和昵称时,例如会话列表和聊天页面的头像及昵称,或者是聊天页面顶部昵称,又或者是发送消息时显示在对方APNS推送中的昵称,都会调用您通过setFetchProfileBlock:接口设置的block获取profile
      • 当获取Profile成功后,你通过progressBlock和completionBlock告知IMSDK,progressBlock用于获取到部分信息,例如仅昵称时就告知IMSDK及时更新显示
      • 在这个Block中,你根据IMSDK传入的Person对象,获取到对应用户的profile信息,一般是通过服务器接口异步下载;
      • 详细请参考iOS Demo中-[SPKitExample exampleSetProfile]方法及调用时机。
      • 注意:IMSDK会缓存profile信息,所以如果修改代码后,想要立刻看到效果,请删除重装测试。SDK也提供了删除缓存、设置缓存时间等相关接口。

  • 如何修改UI自定义配置
    • 解决方法

      • WXOUIModuleResources.bundle中找到OpenIM-Theme.plist文件,尝试修改其中的选项并运行观察效果。

  • 如何定制导航栏
    • IMSDK没有控制导航栏,您需要自己定制导航栏,请参考iOS Demo中-[SPKitExample exampleCustomGlobleNavigationBar]方法。


消息收发遇到问题

  • 进入后台时无法接收到苹果的系统推送
    • 解决方法:

      • 检查推送证书是否已经上传,生产环境的服务器推送证书必须上传,必须设置导入密码。(必须是p12文件,cer文件不行)

        image

      • 目前OpenIM只支持生产环境的推送,因此客户端必须使用Distribution证书的AdHoc Provision打包,请务必检查是否可以正常获取到DeviceToken

        注意,在xcode中使用AdHoc打包运行会弹出如下提示,请确认你打包会弹出:
        image

      • 成功获取到DeviceToken,登录IM成功后,控制台会打印DeviceToken上传成功的Log,请确认是否有该日志

        image

      • 请确认在线消息可以收到后,进入后台。

      • 上述步骤均检查,仍然无法收到APNS推送,请旺旺联系IM后台的开发:不冲。


  • 如何调试苹果的系统推送
    • 现象:目前OpenIM只支持使用生产环境推送证书,因此你只能使用生产环境的AdHoc Provision打包,才能收到苹果的系统推送。但是AdHoc Provision打包的APP不支持Xcode的单步调试。
    • 解决方法:
      • 你可以先使用AdHoc Provision打包,登录IM成功后,进入后台。给这个帐号发送一条消息,确保能够收到APNS推送。
      • 然后可以在Xcode中使用开发环境的带通配符的Provision打包,覆盖安装到这个设备上。使用通配符打包的App不会获得DeviceToken,因此不会将服务器端的DeviceToken清除。
      • 这时候再收到消息时,你就可以单步调试了。

  • 系统推送中显示的人名如何设置
    • 解决方法:

      • 在登录信息中,你需要提供当前登录帐号的昵称;
      • 在登录成功后,IMSDK会通过Profile接口获取到当前帐号的昵称;
      • 由于IMSDK会缓存之前设置的profile信息,因此为了确保修改代码后测试的有效性,请删除原App后调试;
      • APNS Push显示的是消息发送者的昵称,修改代码后登录消息发送者的帐号发送消息,查看对方接收到Push后的效果

  • 调试消息收发,对方没有收到【IMKit & IMCore】
    • 解决方法:

      • 检查收发客户端所使用的AppKey是否一致。
      • 检查消息发送目标ID与接收方登录的ID是否一致。
      • 另外,初次联调消息收发时,建议使用官方Demo作为消息接收方或者消息发送方,以便确保一端是稳定的版本,便于调试另外一端的功能。在Demo中将初始化IM函数的AppKey参数替换为您的AppKey,即可与您的App进行消息收发。

登录遇到问题?

  • 初始化101错误,前缀获取失败 【IMKit & IMCore】
    • 解决方法:

      • 请确认初始化传入的AppKey是正确的;
      • 确认网络状态是否正常;
      • 如果是模拟器,请使用模拟器的Safari访问www.taobao.com以确认模拟器能够访问网络。(iOS8+的模拟器存在bug,Mac网络正常时,模拟器却无法访问网络);

  • 登录失败,提示已有登录线程【IMKit & IMCore】
    • 解决方法:

      • 主动发起登录后,在CompletionBlock返回前,再次发起登录会提示该错误;
      • 已经登录成功某个帐号后,如果没有注销该帐号,再次发起登录会提示该错误;
      • 一般地,你不需要重复发起登录,如果需要停止当前的登录操作,请先调用注销;

  • 登录失败,提示用户名不存在或者密码错误【IMKit & IMCore】
    • 解决方法:

      • 确认该用户I帐号已经通过您的服务器接口导入到IM服务端: 导入用户
      • 确认密码的大小写是否正确,密码是大小写敏感的

API使用有问题?

  • 如何发送自定义消息?
    • 解决方法:

      • 请参考iOS Demo-[SPKitExample exampleSendCustomMessageWithConversationController]-[SPKitExample exampleShowCustomMessageWithConversationController]方法。分别用于发送和显示自定义消息。

  • 添加了监听,但是没有回调到?

    SDK中有不少添加监听的接口,如果您添加了监听,但是没有回调到,请检查:

    • 如果您是调用Service的添加监听接口,可以检查一下该Service对象是否为nil;如果为nil,可能的原因是您还没有获取并初始化IMCore或者IMKit对象。

  • 怎么从YWConversation对象,获取YWPerson信息

    你需要判断YWConversation的class,如果是YWP2PConversation,则可以强制转换指针,从中取出YWPerson对象。例如:

    if ([conv isKindOfClass:[YWP2PConversation class]]) {
    	YWPerson *person = [(YWP2PConversation *)conv person];
    	...
    }

集成遇到问题?

  • -ObjC编译选项【IMKit & IMCore】
    • 现象:

      初始化或者调用接口时Crash

      Terminating app due to uncaught exception
       'NSInvalidArgumentException', 
       reason: '-[YWAPI syncGetPrefixOfAppKeys:getError:]: 
       unrecognized selector sent to instance 0x7fbd4bc4e790'
    • 解决方法:

      遇到上述提示类似的错误,请检查您的工程设置中, Build Settings > Lnking > Other Linker Flags中是否已经添加-ObjC选项,并且请注意大小写是否正确。


  • 链接失败,提示"_ALBBOpenAccountSession … symbol(s) not found"
    • 解决方法

      • 如果没有使用OpenAccount,去除链入TaeWXSDKForFree.framework

  • IMSDK资源文件或者身份图片yw_1222.jpg没有添加【IMKit & IMCore】
    • 现象:

      弹出空白页面并提示或者直接crash,提示无法找到nib文件

      Application tried to push a nil view controller
       on target <WXOUINavigationController: 0x7fcdcac69b90>.
    • 解决方法:

      从SDK包中找到WXOpenIMSDKResource.bundle资源包,将其拖到您的Xcode工程中,确保其能被复制到您App的MainBundle中。

      将专属于您的yw1222.jpg身份图片,添加到您的Xcode工程中,并确保其能被复制到您App的MainBundle中。


  • UTMinit、UTDID、SecurityGuard等库链接冲突
    • 解决方法

      可能是因为您已经链接了百川平台的TAESDK,该SDK中包含了上述静态库。您只需要将上述冲突的库从您工程的链接列表中去除。


  • UISDK资源文件没有添加 【IMKit】
    • 现象:

      打开会话列表或者聊天页面时crash

      Terminating app due to uncaught exception
       'NSInternalInconsistencyException', 
       reason: 'Could not load NIB in bundle: 'NSBundle </Users/huanglei/Library/Developer/CoreSimulator/Devices/D9D2B27D-6788-41C9-9A5E-F264D61C56AD/data/Containers/Bundle/Application/821C05D7-8551-4DBE-9332-A0510A015808/WXOpenIMSampleRelease.app> (loaded)' 
       with name 'SessionListViewController''
    • 解决方法:

      从SDK包中找到WXOUIModuleResources.bundle资源包,将其拖到您的Xcode工程中,确保其能被复制到您App的MainBundle中。


FAQ

关于此文档暂时还没有FAQ
返回
顶部