Ver código fonte

feat:兼容安卓和ios

xsx 2 anos atrás
pai
commit
0fbee8e93b

+ 1 - 1
im-ui/package.json

@@ -4,7 +4,7 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
+    "build": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service build",
     "lint": "vue-cli-service lint"
   },
   "dependencies": {

+ 7 - 6
im-uniapp/App.vue

@@ -3,7 +3,8 @@
 	import http from './common/request';
 	import * as enums from './common/enums';
 	import * as wsApi from './common/wssocket';
-
+	import UNI_APP from '@/.env.js'
+	
 	export default {
 		data() {
 			return {
@@ -26,7 +27,7 @@
 			initWebSocket() {
 				let loginInfo = uni.getStorageSync("loginInfo")
 				wsApi.init();
-				wsApi.connect(process.env.WS_URL, loginInfo.accessToken);
+				wsApi.connect(UNI_APP.WS_URL, loginInfo.accessToken);
 				wsApi.onConnect(() => {
 					// 加载离线消息
 					this.pullPrivateOfflineMessage(store.state.chatStore.privateMsgMaxId);
@@ -49,15 +50,15 @@
 					}
 				});
 				wsApi.onClose((res) => {
-					// 3000是客户端主动关闭
-					if (res.code != 3000) {
+					// 1000是客户端正常主动关闭
+					if (res.code != 1000) {
 						// 重新连接
 						uni.showToast({
 							title: '连接已断开,尝试重新连接...',
 							icon: 'none',
 						})
 						let loginInfo = uni.getStorageSync("loginInfo")
-						wsApi.reconnect(process.env.WS_URL, loginInfo.accessToken);
+						wsApi.reconnect(UNI_APP.WS_URL, loginInfo.accessToken);
 					}
 				})
 			},
@@ -204,7 +205,7 @@
 			},
 			exit() {
 				console.log("exit");
-				wsApi.close();
+				wsApi.close(1000);
 				uni.removeStorageSync("loginInfo");
 				uni.reLaunch({
 					url: "/pages/login/login"

+ 4 - 2
im-uniapp/common/request.js

@@ -1,3 +1,5 @@
+import UNI_APP from '@/.env.js'
+
 // 请求队列
 let requestList = [];
 // 是否正在刷新中
@@ -11,7 +13,7 @@ const request = (options) => {
 	}
 	return new Promise(function(resolve, reject) {
 		uni.request({
-			url: process.env.BASE_URL + options.url,
+			url: UNI_APP.BASE_URL + options.url,
 			method: options.method || 'GET',
 			header: header,
 			data: options.data || {},
@@ -71,7 +73,7 @@ const reqRefreshToken = (loginInfo) => {
 	return new Promise(function(resolve, reject) {
 		uni.request({
 			method: 'PUT',
-			url: process.env.BASE_URL + '/refreshToken',
+			url: UNI_APP.BASE_URL + '/refreshToken',
 			header: {
 				refreshToken: loginInfo.refreshToken
 			},

+ 6 - 8
im-uniapp/common/wssocket.js

@@ -46,17 +46,15 @@ let init = () => {
 
 	uni.onSocketClose((res) => {
 		console.log('WebSocket连接关闭')
-		isConnect = false; //断开后修改标识
+		isConnect = false;
 		closeCallBack && closeCallBack(res);
 	})
 
 	uni.onSocketError((e) => {
 		console.log(e)
-		isConnect = false; //连接断开修改标识
-		uni.showModal({
-			content: '连接失败,可能是websocket服务不可用,请稍后再试',
-			showCancel: false,
-		})
+		isConnect = false;
+		// APP 应用切出超过一定时间(约1分钟)会触发报错,此处回调给应用进行重连
+		closeCallBack && closeCallBack({code: 1006});
 	})
 };
 
@@ -95,12 +93,12 @@ let reconnect = (wsurl, accessToken) => {
 };
 
 //设置关闭连接
-let close = () => {
+let close = (code) => {
 	if (!isConnect) {
 		return;
 	}
 	uni.closeSocket({
-		code: 3000,
+		code: code,
 		complete: (res) => {
 			console.log("关闭websocket连接");
 			isConnect = false;

+ 5 - 2
im-uniapp/components/file-upload/file-upload.vue

@@ -5,6 +5,8 @@
 </template>
 
 <script>
+	import UNI_APP from '@/.env.js';
+	
 	export default {
 		name: "file-upload",
 		data() {
@@ -34,8 +36,9 @@
 		},
 		methods: {
 			selectAndUpload() {
+				console.log(uni.chooseFile)
+				console.log(uni.chooseMessageFile)
 				let chooseFile = uni.chooseFile || uni.chooseMessageFile;
-				console.log(chooseFile)
 				chooseFile({
 					success: (res) => {
 						res.tempFiles.forEach((file) => {
@@ -56,7 +59,7 @@
 			},
 			uploadFile(file) {
 				uni.uploadFile({
-					url: process.env.BASE_URL + '/file/upload',
+					url: UNI_APP.BASE_URL + '/file/upload',
 					header: {
 						accessToken: uni.getStorageSync("loginInfo").accessToken
 					},

+ 3 - 1
im-uniapp/components/image-upload/image-upload.vue

@@ -5,6 +5,8 @@
 </template>
 
 <script>
+	import UNI_APP from '@/.env.js'
+
 	export default {
 		name: "image-upload",
 		data() {
@@ -65,7 +67,7 @@
 			},
 			uploadImage(file) {
 				uni.uploadFile({
-					url: process.env.BASE_URL + '/image/upload',
+					url: UNI_APP.BASE_URL + '/image/upload',
 					header: {
 						accessToken: uni.getStorageSync("loginInfo").accessToken
 					},

+ 0 - 1
im-uniapp/main.js

@@ -5,7 +5,6 @@ import * as  enums from './common/enums.js';
 import * as date from './common/date';
 import * as socketApi from './common/wssocket';
 import store from './store';
-
 import { createSSRApp } from 'vue'
 
 export function createApp() {

+ 46 - 5
im-uniapp/manifest.json

@@ -1,5 +1,5 @@
 {
-    "name" : "im-uniapp",
+    "name" : "盒子IM",
     "appid" : "__UNI__69DD57A",
     "description" : "",
     "versionName" : "1.0.0",
@@ -17,7 +17,9 @@
             "delay" : 0
         },
         /* 模块配置 */
-        "modules" : {},
+        "modules" : {
+            "Camera" : {}
+        },
         /* 应用发布信息 */
         "distribute" : {
             /* android打包配置 */
@@ -38,12 +40,51 @@
                     "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                     "<uses-feature android:name=\"android.hardware.camera\"/>",
                     "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-                ]
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
+                "minSdkVersion" : 21
             },
             /* ios打包配置 */
-            "ios" : {},
+            "ios" : {
+                "dSYMs" : false
+            },
             /* SDK配置 */
-            "sdkConfigs" : {}
+            "sdkConfigs" : {
+                "ad" : {},
+                "speech" : {}
+            },
+            "icons" : {
+                "android" : {
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
+            }
         }
     },
     /* 快应用特有相关 */

+ 1 - 0
im-uniapp/pages.json

@@ -1,4 +1,5 @@
 {
+	"lazyCodeLoading":"requiredComponents",
 	"pages": [{
 		"path": "pages/login/login"
 	}, {

+ 7 - 4
im-uniapp/pages/chat/chat-box.vue

@@ -58,6 +58,8 @@
 					</image-upload>
 					<view class="tool-name">拍摄</view>
 				</view>
+				<!-- #ifndef APP-PLUS -->
+				<!-- APP 暂时不支持选择文件 -->
 				<view class="chat-tools-item">
 					<file-upload :onBefore="onUploadFileBefore" :onSuccess="onUploadFileSuccess"
 						:onError="onUploadFileFail">
@@ -65,6 +67,7 @@
 					</file-upload>
 					<view class="tool-name">文件</view>
 				</view>
+				<!-- #endif -->
 				<view class="chat-tools-item" @click="showTip()">
 					<view class="tool-icon iconfont icon-microphone"></view>
 					<view class="tool-name">语音输入</view>
@@ -113,6 +116,7 @@
 		},
 		methods: {
 			showTip() {
+				
 				uni.showToast({
 					title: "暂未支持...",
 					icon: "none"
@@ -723,17 +727,16 @@
 			.chat-tools {
 				display: flex;
 				flex-wrap: wrap;
-				justify-content: space-between;
-
+			
 				.chat-tools-item {
 					width: 140rpx;
-					padding: 15rpx;
+					padding: 16rpx;
 					display: flex;
 					flex-direction: column;
 					align-items: center;
 
 					.tool-icon {
-						padding: 15rpx;
+						padding: 18rpx;
 						font-size: 80rpx;
 						background-color: white;
 						border-radius: 20%;

+ 1 - 1
im-uniapp/pages/group/group.vue

@@ -14,7 +14,7 @@
 		<view class="group-items" v-else>
 			<scroll-view class="scroll-bar" scroll-with-animation="true" scroll-y="true">
 				<view v-for="group in $store.state.groupStore.groups" :key="group.id">
-					<group-item :group="group"></group-item>
+					<group-item v-if="!group.quit" :group="group"></group-item>
 				</view>
 			</scroll-view>
 		</view>

+ 2 - 0
im-uniapp/pages/login/login.vue

@@ -47,6 +47,8 @@
 					method: 'POST'
 				}).then(data => {
 					console.log("登录成功,自动跳转到聊天页面...")
+					uni.setStorageSync("userName", this.loginForm.userName);
+					uni.setStorageSync("password", this.loginForm.password);
 					uni.setStorageSync("loginInfo", data);
 					// 调用App.vue的初始化方法
 					getApp().init()