开发准备
<h2>添加jar文件</h2>
<p>将IM的jar包复制到工程的libs目录下,如果有老版本jar包在其中,请替换。如图显示:
<img src="https://www.showdoc.cc/server/api/attachment/visitfile/sign/cde6a528e9de39f6790a11150763f2a9?showdoc=.jpg" alt="" /></p>
<h2>配置AndroidManifest文件</h2>
<p>集成IM需要在application标签下注册服务QDIMService,用于和服务端的交互和本地数据处理</p>
<pre><code class="language-java"> <service android:name="com.longchat.base.service.QDIMService" /></code></pre>
<p>配置权限</p>
<pre><code class="language-java"> <!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" /></code></pre>
<p>app下面的build.gradle配置</p>
<pre><code class="language-java"> implementation "com.squareup.okhttp3:okhttp:3.12.1"
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
implementation 'com.squareup.okio:okio:2.2.0'
implementation "com.squareup.retrofit2:retrofit:2.5.0"
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'</code></pre>
<p>混淆配置</p>
<pre><code class="language-java">-keep class com.longchat.base.**{*;}
########okhttp#########
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-dontwarn okio.**
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain service method parameters.
-keepclassmembernames,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
########okhttp#########</code></pre>
<p>如果需要集成手机厂商的消息离线推送功能,请自行按照各个厂商的离线推送说明文档进行配置</p>
<h2>注意事项</h2>
<p>由于Android P(包含更高版本)系统禁止使用所有未加密的连接,所以在使用检索功能(poi检索,路线规划,行政区域检索,地理编码,逆地理编码)会返回error.SEARCH_SERVER_INTERNAL_ERROR。并有如下异常信息:</p>
<pre><code> W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted</code></pre>
<p>针对该问题有以下三种解决方案如下:</p>
<ol>
<li>targetSdkVersion 降到27以下;</li>
<li>按如下方式更改网络安全配置
2.1)在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<pre><code class="language-java"><?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config></code></pre>
<p>2.2)在AndroidManifest.xml文件下的application标签增加以下属性:</p>
<pre><code class="language-java"><application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/></code></pre></li>
</ol>
<p>Android 10 改变了文件的存储方式
可以在Androidmainfest 里面的application添加
android:requestLegacyExternalStorage="true"
<img src="https://upload-images.jianshu.io/upload_images/7272532-15509655b9766dfd.png" alt="" /></p>
<pre><code class="language-mindmap"># QDClient
## QDFriendManager
## QDGroupManager
## QDFileManger
## QDSelfManager
## QDWorkManager
## QDCloudManger
## QDAccManager
## QDSignManger</code></pre>
<ul>
<li>QDClient: SDK 的入口,主要完成初始化、消息创建、发送等功能。也是获取其他模块的入口。</li>
<li>QDFriendManager: 好友相关的接口</li>
<li>QDGroupManager: 群组相关的接口</li>
<li>QDFileManger: 文件相关的接口</li>
<li>QDSelfManger: 登陆者相关的接口</li>
<li>QDWorkManager: 应用相关的接口</li>
<li>QDCloudManger: 云盘相关的接口</li>
<li>QDAccManager: 公众号相关的接口</li>
<li>QDSignManager: 外勤签到相关的接口</li>
</ul>