@@ -0,0 +1 @@ | |||||
PushDemo |
@@ -2,6 +2,9 @@ | |||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||
xmlns:tools="http://schemas.android.com/tools"> | xmlns:tools="http://schemas.android.com/tools"> | ||||
<queries> | |||||
<package android:name="com.tencent.mm" /> | |||||
</queries> | |||||
<application | <application | ||||
android:name="cn.org.bjca.trust.Myapplication" | android:name="cn.org.bjca.trust.Myapplication" | ||||
android:allowBackup="true" | android:allowBackup="true" | ||||
@@ -14,6 +17,7 @@ | |||||
android:theme="@style/Theme.PushDemo" | android:theme="@style/Theme.PushDemo" | ||||
android:usesCleartextTraffic="true" | android:usesCleartextTraffic="true" | ||||
tools:targetApi="31"> | tools:targetApi="31"> | ||||
<activity | <activity | ||||
android:name=".LoginActivity" | android:name=".LoginActivity" | ||||
android:exported="true"> | android:exported="true"> | ||||
@@ -29,7 +33,7 @@ | |||||
</activity> | </activity> | ||||
<activity | <activity | ||||
android:name=".MainActivity" | android:name=".MainActivity" | ||||
android:exported="true"/> | |||||
android:exported="true" /> | |||||
</application> | </application> | ||||
</manifest> | </manifest> |
@@ -1,17 +1,16 @@ | |||||
package cn.org.bjca.trust.pushdemo | package cn.org.bjca.trust.pushdemo | ||||
import android.annotation.SuppressLint | |||||
import android.os.Bundle | import android.os.Bundle | ||||
import android.provider.MediaStore | |||||
import androidx.activity.result.contract.ActivityResultContracts | |||||
import cn.org.bjca.trust.push.PushSdk | import cn.org.bjca.trust.push.PushSdk | ||||
import cn.org.bjca.trust.push.common.GraphicHelper | |||||
import cn.org.bjca.trust.push.common.LogHelper | import cn.org.bjca.trust.push.common.LogHelper | ||||
import cn.org.bjca.trust.push.common.MessageHelper | |||||
import cn.org.bjca.trust.push.common.SendMessageHelper | import cn.org.bjca.trust.push.common.SendMessageHelper | ||||
import cn.org.bjca.trust.push.enums.MsgType | import cn.org.bjca.trust.push.enums.MsgType | ||||
import cn.org.bjca.trust.push.message.bean.PictureMessage | |||||
import cn.org.bjca.trust.push.enums.OsType | |||||
import cn.org.bjca.trust.push.message.bean.TextMessage | |||||
import cn.org.bjca.trust.push.message.callback.CallbackListener | |||||
import cn.org.bjca.trust.push.message.msg.Message | |||||
import cn.org.bjca.trust.pushdemo.databinding.ActivityMainBinding | import cn.org.bjca.trust.pushdemo.databinding.ActivityMainBinding | ||||
import com.xuqm.base.extensions.loge | |||||
import com.xuqm.base.ui.BaseActivity | import com.xuqm.base.ui.BaseActivity | ||||
class MainActivity : BaseActivity<ActivityMainBinding>() { | class MainActivity : BaseActivity<ActivityMainBinding>() { | ||||
@@ -21,32 +20,63 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { | |||||
override fun initView(savedInstanceState: Bundle?) { | override fun initView(savedInstanceState: Bundle?) { | ||||
super.initView(savedInstanceState) | super.initView(savedInstanceState) | ||||
PushSdk.instance.register("xuqinmin") | |||||
PushSdk.instance.setMsgCallback(object : CallbackListener { | |||||
override fun sendComplete(msg: Message) { | |||||
} | |||||
override fun sendError(code: String, msg: Message) { | |||||
} | |||||
val r = registerForActivityResult(ActivityResultContracts.GetContent()) { | |||||
it.loge() | |||||
SendMessageHelper.sendImageMessage( | |||||
"xuqinmin", MediaStore.Images.Media.getBitmap( | |||||
contentResolver, it | |||||
) | |||||
) | |||||
} | |||||
@SuppressLint("SetTextI18n") | |||||
override fun messageArrived(msg: Message) { | |||||
if (msg.msgType == MsgType.Text) { | |||||
binding.register.text = | |||||
"收到来自${msg.fromClientId}的消息:${(msg as TextMessage).text}" | |||||
} | |||||
} | |||||
binding.register.setOnClickListener { | |||||
val m = MessageHelper.getMessageForPage(1, 10) | |||||
LogHelper.e(m[0]) | |||||
if (m[0].msgType == MsgType.Image) { | |||||
binding.iv.setImageBitmap(GraphicHelper.base64ToBitmap((m[0] as PictureMessage).thumbnail)) | |||||
override fun connected() { | |||||
} | } | ||||
} | |||||
override fun connectionKicked(var1: OsType) { | |||||
} | |||||
override fun connectError(code: String) { | |||||
LogHelper.e(code) | |||||
} | |||||
override fun connectionLost() { | |||||
} | |||||
override fun exceptionCause(var1: Throwable) { | |||||
} | |||||
}) | |||||
binding.send.setOnClickListener { | binding.send.setOnClickListener { | ||||
SendMessageHelper.sendTextMessage("xuqm", "hello${System.currentTimeMillis()}") | |||||
// r.launch("image/*") | |||||
// val i = Intent(Intent.ACTION_VIEW); | |||||
// val guanzhu_URL = "http://weixin.qq.com/r/STn7497EyYO2rZqA92xb"; | |||||
//// val guanzhu_URL = "http://weixin.qq.com/q/02XqFpkZY9c-C1uvxyxAco"; | |||||
// i.data = Uri.parse(guanzhu_URL); | |||||
// i.setPackage("com.tencent.mm"); | |||||
// i.putExtra(Intent.EXTRA_SUBJECT, "Share"); | |||||
// i.flags = Intent.FLAG_ACTIVITY_NEW_TASK; | |||||
// startActivity(i); | |||||
// | |||||
// | |||||
SendMessageHelper.sendTextMessage( | |||||
if (binding.user.text.isNullOrEmpty()) "xuqm" else binding.user.text.toString(), | |||||
"hello${System.currentTimeMillis()}" | |||||
) | |||||
} | } | ||||
binding.sendG.setOnClickListener { | binding.sendG.setOnClickListener { | ||||
SendMessageHelper.sendTextMessage("G_hfisoahfisaohdisa", "hello,Group_${System.currentTimeMillis()}") | |||||
// r.launch("image/*") | |||||
SendMessageHelper.sendTextMessage( | |||||
"G_hfisoahfisaohdisa", | |||||
"hello,Group_${System.currentTimeMillis()}" | |||||
) | |||||
} | } | ||||
} | } | ||||
@@ -10,16 +10,26 @@ | |||||
<TextView | <TextView | ||||
android:id="@+id/register" | android:id="@+id/register" | ||||
android:layout_width="wrap_content" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="注册im服务" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
android:text="新消息" | |||||
android:layout_marginTop="15dp" | |||||
app:layout_constraintEnd_toEndOf="parent" | app:layout_constraintEnd_toEndOf="parent" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toTopOf="parent" | |||||
app:layout_constraintVertical_bias="0.08" /> | |||||
app:layout_constraintTop_toTopOf="parent" /> | |||||
<TextView | |||||
<EditText | |||||
android:id="@+id/user" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
android:layout_marginBottom="10dp" | |||||
android:text="xuqm" | |||||
android:hint="请输入消息接收人" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintBottom_toTopOf="@+id/send" | |||||
/> | |||||
<Button | |||||
android:id="@+id/send" | android:id="@+id/send" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
@@ -29,7 +39,7 @@ | |||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toTopOf="parent" | app:layout_constraintTop_toTopOf="parent" | ||||
app:layout_constraintVertical_bias="0.188" /> | app:layout_constraintVertical_bias="0.188" /> | ||||
<TextView | |||||
<Button | |||||
android:id="@+id/sendG" | android:id="@+id/sendG" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
@@ -38,15 +48,6 @@ | |||||
android:layout_marginTop="10dp" | android:layout_marginTop="10dp" | ||||
app:layout_constraintStart_toStartOf="parent" | app:layout_constraintStart_toStartOf="parent" | ||||
app:layout_constraintTop_toBottomOf="@+id/send" /> | app:layout_constraintTop_toBottomOf="@+id/send" /> | ||||
<ImageView | |||||
android:layout_width="200dp" | |||||
android:layout_height="200dp" | |||||
android:id="@+id/iv" | |||||
app:layout_constraintBottom_toBottomOf="parent" | |||||
app:layout_constraintStart_toStartOf="parent" | |||||
app:layout_constraintEnd_toEndOf="parent" | |||||
app:layout_constraintTop_toBottomOf="@+id/send" | |||||
/> | |||||
</androidx.constraintlayout.widget.ConstraintLayout> | </androidx.constraintlayout.widget.ConstraintLayout> | ||||
</layout> | </layout> |
@@ -5,5 +5,5 @@ import retrofit2.http.Path | |||||
interface PushService { | interface PushService { | ||||
@GET("hello/{id}") | @GET("hello/{id}") | ||||
suspend fun getArticle(@Path("id") id: Int): HttpResult<String> | |||||
suspend fun getArticle(@Path("id") id: String): HttpResult<String> | |||||
} | } |
@@ -2,13 +2,17 @@ package cn.org.bjca.trust.push.manager | |||||
import android.content.Context | import android.content.Context | ||||
import cn.org.bjca.trust.push.BuildConfig | import cn.org.bjca.trust.push.BuildConfig | ||||
import cn.org.bjca.trust.push.api.PushService | |||||
import cn.org.bjca.trust.push.common.DeviceHelper | import cn.org.bjca.trust.push.common.DeviceHelper | ||||
import cn.org.bjca.trust.push.common.LogHelper | |||||
import cn.org.bjca.trust.push.di.manager.HttpManager | |||||
import cn.org.bjca.trust.push.enums.OsType | import cn.org.bjca.trust.push.enums.OsType | ||||
import cn.org.bjca.trust.push.kit.SdkInterface | import cn.org.bjca.trust.push.kit.SdkInterface | ||||
import cn.org.bjca.trust.push.message.ImCallback | import cn.org.bjca.trust.push.message.ImCallback | ||||
import cn.org.bjca.trust.push.message.ImManager | import cn.org.bjca.trust.push.message.ImManager | ||||
import cn.org.bjca.trust.push.message.callback.CallbackListener | import cn.org.bjca.trust.push.message.callback.CallbackListener | ||||
import cn.org.bjca.trust.push.message.client.ImConnectOptions | import cn.org.bjca.trust.push.message.client.ImConnectOptions | ||||
import kotlinx.coroutines.runBlocking | |||||
class PushSdkManager : SdkInterface { | class PushSdkManager : SdkInterface { | ||||
@@ -23,15 +27,15 @@ class PushSdkManager : SdkInterface { | |||||
private fun registerPush(userId: String) {} | private fun registerPush(userId: String) {} | ||||
private fun registerIm(userId: String) { | private fun registerIm(userId: String) { | ||||
// runBlocking { | |||||
// HttpManager.getApi( | |||||
// HttpManager.getAppComponent("http://192.168.115.137:8080"), | |||||
// PushService::class.java | |||||
// ) | |||||
// .getArticle(42) | |||||
// }.also { | |||||
// LogHelper.e(it, "初始化登录") | |||||
// } | |||||
runBlocking { | |||||
HttpManager.getApi( | |||||
HttpManager.getAppComponent("https://xuqinmin.com"), | |||||
PushService::class.java | |||||
) | |||||
.getArticle(userId) | |||||
}.also { | |||||
LogHelper.e(it, "初始化登录") | |||||
} | |||||
//先关闭已有连接 | //先关闭已有连接 | ||||
if (ImManager.instance.isConnect() || ImManager.instance.isConnecting()) { | if (ImManager.instance.isConnect() || ImManager.instance.isConnecting()) { | ||||
@@ -40,7 +44,7 @@ class PushSdkManager : SdkInterface { | |||||
if (::imConnectOptions.isInitialized) { | if (::imConnectOptions.isInitialized) { | ||||
imConnectOptions.clientId = userId | imConnectOptions.clientId = userId | ||||
imConnectOptions.host = "192.168.115.137" | |||||
imConnectOptions.host = "114.115.203.60" | |||||
imConnectOptions.port = 18883 | imConnectOptions.port = 18883 | ||||
imConnectOptions.deviceId = DeviceHelper.getDeviceId() | imConnectOptions.deviceId = DeviceHelper.getDeviceId() | ||||
imConnectOptions.token = "token" | imConnectOptions.token = "token" | ||||
@@ -48,7 +52,7 @@ class PushSdkManager : SdkInterface { | |||||
imConnectOptions.sdkVersion = BuildConfig.versionName | imConnectOptions.sdkVersion = BuildConfig.versionName | ||||
} else { | } else { | ||||
imConnectOptions = ImConnectOptions( | imConnectOptions = ImConnectOptions( | ||||
"192.168.115.137", | |||||
"114.115.203.60", | |||||
18883, | 18883, | ||||
userId, | userId, | ||||
DeviceHelper.getDeviceId(), | DeviceHelper.getDeviceId(), | ||||
@@ -53,8 +53,9 @@ class ImClient : ImClientInterface { | |||||
} catch (e: MqttException) { | } catch (e: MqttException) { | ||||
LogHelper.e("--------", e) | LogHelper.e("--------", e) | ||||
connectOptions.callback?.connectError(ERROR_CONNECTED) | connectOptions.callback?.connectError(ERROR_CONNECTED) | ||||
} finally{ | |||||
isConnecting = false | |||||
} | } | ||||
isConnecting = false | |||||
}.start() | }.start() | ||||
} | } | ||||
@@ -68,7 +69,7 @@ class ImClient : ImClientInterface { | |||||
options = MqttConnectOptions() | options = MqttConnectOptions() | ||||
options.isCleanSession = true | options.isCleanSession = true | ||||
options.userName = connectOptions.clientId | options.userName = connectOptions.clientId | ||||
options.password = "xuqinmin".toCharArray() | |||||
options.password = connectOptions.clientId.toCharArray() | |||||
options.connectionTimeout = connectOptions.connectTimeOutSecond | options.connectionTimeout = connectOptions.connectTimeOutSecond | ||||
options.keepAliveInterval = connectOptions.pingInterval | options.keepAliveInterval = connectOptions.pingInterval | ||||
options.isAutomaticReconnect = true | options.isAutomaticReconnect = true | ||||
@@ -7,6 +7,7 @@ abstract class Message { | |||||
var messageId: String? = null | var messageId: String? = null | ||||
var timestamp: Long = 0 | var timestamp: Long = 0 | ||||
var fromClientId: String? = null | var fromClientId: String? = null | ||||
var describe: String? = null | |||||
var toClientId: String? = null | var toClientId: String? = null | ||||
var target: String? = null | var target: String? = null | ||||
var msgType: MsgType = MsgType.UNKNOWN | var msgType: MsgType = MsgType.UNKNOWN | ||||
@@ -19,6 +20,7 @@ abstract class Message { | |||||
this.messageId = sendMessage.messageId | this.messageId = sendMessage.messageId | ||||
this.timestamp = sendMessage.timestamp | this.timestamp = sendMessage.timestamp | ||||
this.fromClientId = sendMessage.fromClientId | this.fromClientId = sendMessage.fromClientId | ||||
this.describe = sendMessage.fromClientId | |||||
this.toClientId = sendMessage.toClientId | this.toClientId = sendMessage.toClientId | ||||
this.target = sendMessage.target | this.target = sendMessage.target | ||||
this.tenantNo = sendMessage.tenantNo | this.tenantNo = sendMessage.tenantNo | ||||
@@ -32,6 +34,7 @@ abstract class Message { | |||||
val sb = StringBuffer() | val sb = StringBuffer() | ||||
sb.append("id: $messageId\n") | sb.append("id: $messageId\n") | ||||
sb.append("from: $fromClientId\n") | sb.append("from: $fromClientId\n") | ||||
sb.append("describe: $describe\n") | |||||
sb.append("to: $toClientId\n") | sb.append("to: $toClientId\n") | ||||
sb.append("type: $msgType\n") | sb.append("type: $msgType\n") | ||||
sb.append("timestamp: $timestamp\n") | sb.append("timestamp: $timestamp\n") | ||||