当前位置: 首页 > news >正文

seo网站推广下载国产系统2345

seo网站推广下载,国产系统2345,海口 做网站,wordpress更新文章收录使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcomnameIronman这里的userId可以使用用户的email#xff0c;但是要截断和 . 符号#xff0c;即1690544…使用融云做登录注册思路 注册界面需要name, email, password考虑到融云注册用户的post格式 POST http://api.rong-api.com/user/getToken.json?userId1690544550qqcomnameIronman这里的userId可以使用用户的email但是要截断和 . 符号即1690544550qq.com - 1690544550qqcom, 融云不让我传完整的邮箱地址这里可能要考虑到奇怪的邮箱地址,如fuckerfuckerfucker.edu.cn,我不确定截断后的是fuckerfuckerfuckereducn能不能还原成邮箱地址注册的name传入post 参数的name融云注册返回格式 {code: 200,userId: 1690544550qqcom,token: 测试 }那android注册界面需要检查返回的response的code200和token!null 如果ok注册用户成功登录界面需要email和password, 这里可能还要考虑到自己搭建服务后端来存取用户基本信息(email, password)但是查到融云一条api是关于查询用户信息的 POST http://api.rong-api.com/user/info.json?userId1690544550qqcom接口返回 {code: 200,userName: Ironman,userPortrait: http://abc.com/myportrait.jpg,createTime: 2025-03-05 11:46:49 }现在考虑怎么校验密码那一块, 校验密码能不能本地校验就是注册的时候拿到email和password存到手机本地数据库到登录时需要用userId请求融云用户信息检查code200, 密码就比对本地数据库的email, password一对,好像相对繁琐了登录成功后跳转界面完啦注册的页面还要考虑到验证邮箱地址正确就是发邮箱验证码这不知道怎么入手 todo实现以上思路 1. 使用go语言简单搭建一个邮箱验证码服务邮箱服务来自qq邮箱 后端地址: https://gitee.com/EEPPEE_admin/dont-want-to-write-code-anymore/tree/master/send_code_to_mail配置自己的qqmail 授权码还有自己的发送邮箱地址提供接口 ### 发送验证码这里的email是从adnroid客户端注册用户获取 POST http://localhost:8080/send-code?email1876056356qq.com ### 验证验证码, 738702 是验证码有发送验证码获取随机的这里的email是从adnroid客户端注册用户获取 POST http://localhost:8080/verify-code?email1876056356qq.comcode62712. 搭建data层调式邮箱验证码 先启动后端go run main.go创建data/network/EmailVerifyCodeApiService.kt // Base url:https://7f498cbc.r7.cpolar.top interface EmailVerifyCodeApiService {POST(send-code)fun sendVerificationCode(Query(email) email: String): CallVerifyCodeResponsePOST(verify-code)fun verifyEmailCode(Query(email) email: String,Query(code) code: String): CallVerifyCodeResponse}// 邮箱验证码的返回 data class VerifyCodeResponse(val message: String )object EmailVerifyCodeApiClient {// todo: 这个base url随时变动根据你的cpolar地址来private const val BASE_URL https://7f498cbc.r7.cpolar.topprivate var apiService: EmailVerifyCodeApiService? nullval emailVerifyCodeApiService: EmailVerifyCodeApiService?get() {if (apiService null) {val client: OkHttpClient OkHttpClient.Builder().build()val retrofit Retrofit.Builder().baseUrl(BASE_URL).client(client).addConverterFactory(GsonConverterFactory.create()).build()apiService retrofit.create(EmailVerifyCodeApiService::class.java)}return apiService} }测试点击发送邮件事件(这个简单界面代码就不给出了就一个按钮一个EditText使用viewbinding) binding.sendBtn.setOnClickListener {val email binding.emailEt.text.toString().trim()// todo: 处理发送邮箱验证码val apiService EmailVerifyCodeApiClient.emailVerifyCodeApiServiceval call apiService?.sendVerificationCode(email)call!!.enqueue(object : retrofit2.CallbackVerifyCodeResponse {override fun onResponse(call: CallVerifyCodeResponse,response: ResponseVerifyCodeResponse) {Log.d(注册, response.body().toString())Log.d(注册, 发送邮箱验证码成功)}override fun onFailure(call: CallVerifyCodeResponse, t: Throwable) {Log.d(注册, 发送验证码失败)}})}测试邮箱验证码发送通过 3. 调试融云api 创建data/network/RongCloudApiService.kt // todo: 构建融云api服务, 接口里面的方法可以是suspend和普通函数 /* 普通函数 vs. suspend 函数 普通函数 使用回调Callback或 Call 对象来处理异步请求。 适用于传统的异步编程模型。 代码相对复杂需要处理回调和线程切换。 suspend 函数 使用 Kotlin 协程来处理异步请求。 代码更简洁更接近同步编程风格。 需要结合 CoroutineScope 或其他协程工具来调用。 示例代码*/ interface RongCloudApiService {FormUrlEncodedPOST(user/getToken.json)fun getToken(// 这是x-form形式Field(userId) userId: String, // todo: requiredField(name) name: String ,Field(portraitUri) portraitUri: String ): CallGetTokenResponse// POST(user/info.json) // fun getRongCloudUserInfo( // Query(userId) userId: String // ): ResponseRongCloudUserInfoFormUrlEncodedPOST(user/info.json)fun getUserInfo(Field(userId) userId: String,): CallUserInfoResponse}// user/getToken.json接口的返回 data class GetTokenResponse(val code: Int,val userId: String,val token: String? )// user/info.json接口的返回 data class UserInfoResponse(val code: Int,val userName: String,val userPortrait: String?,val createTime: String )object RongCloudApiClient {// 要求不能明文传输改成httpsprivate const val BASE_URL https://api.rong-api.com/private const val APP_KEY 你自己的private const val NONCE 1442907399private const val TIMESTAMP 1741092643private const val SIGNATURE 你自己的private var apiService: RongCloudApiService? null// todo: 获取实例方法val rongIMApiService: RongCloudApiService?get() {if (apiService null) {val client: OkHttpClient OkHttpClient.Builder().addInterceptor(Interceptor { chain -val originalRequest: Request chain.request()val newRequest: Request originalRequest.newBuilder().header(App-Key, APP_KEY).header(Nonce, NONCE).header(Timestamp, TIMESTAMP).header(Signature, SIGNATURE).header(Content-Type, application/x-www-form-urlencoded).build()chain.proceed(newRequest)}).build()val retrofit Retrofit.Builder().baseUrl(BASE_URL).client(client).addConverterFactory(GsonConverterFactory.create()).build()apiService retrofit.create(RongCloudApiService::class.java)}return apiService} }调试代码,点击一个注册按钮观察Logcat binding.registerBtn.setOnClickListener {val email binding.emailEt.text.toString().trim()Log.d(注册, email)val name binding.nameEt.text.toString().trim()Log.d(注册, name)val password binding.passwordEt.text.toString().trim()Log.d(注册, password)val mailVerifyCode binding.mailVerifycodeEt.text.toString().trim()Log.d(注册, mailVerifyCode)if (name.isEmpty() || email.isEmpty() || password.isEmpty() || mailVerifyCode.isEmpty()) {Toast.makeText(this, 请填充完整信息, Toast.LENGTH_SHORT).show()returnsetOnClickListener}// email 处理成 userIdval processedEmailAsUserId EmailUtil.convertEmailToRongCloudId(email)Log.d(注册, processedEmailAsUserId)// todo 取到接口实例val apiService RongCloudApiClient.rongIMApiService// todo 调用api serviceval call apiService?.getToken(processedEmailAsUserId,name)// todo call 进入队列call!!.enqueue(object : retrofit2.CallbackGetTokenResponse {override fun onResponse(call: CallGetTokenResponse,response: retrofit2.ResponseGetTokenResponse) {Log.d(注册, response.body().toString())//RongCloudTokenResponse(code200, userId13266263124qqcom, tokenSeq1kNg6Uft4UOBPzi2gGqh30okEsnM0kPAf6ohCvgf1vll6L9v54Aptfq.cn.rongnav.com;ptfq.cn.rongcfg.com)}override fun onFailure(call: CallGetTokenResponse, t: Throwable) {Log.d(注册, 获取token失败)}})// todo new call 进入队列val newcall apiService?.getUserInfo(processedEmailAsUserId)newcall!!.enqueue(object : retrofit2.CallbackUserInfoResponse {override fun onResponse(call: CallUserInfoResponse,response: ResponseUserInfoResponse) {Log.d(注册, response.body().toString())// UserInfoResponse(code200, userName好, userPortraithttp://abc.com/myportrait.jpg, createTime2025-03-05 16:51:19)}override fun onFailure(call: CallUserInfoResponse, t: Throwable) {Log.d(注册, 获取用户信息失败)}})}todo还要考虑谷歌和facebook登录情况
http://www.hkea.cn/news/14498129/

相关文章:

  • 做网站有什么js特效关于做甜品的网站
  • 企业创建网站搬瓦工可以长期做网站
  • 建网站大概多少费用门户网站管理系统
  • cms高端建站玉环县建设局网站
  • 电子商务网站免费模板天堂 在线地址8
  • 晋城市城乡建设局网站电子商务网站网络安全设计方案
  • 网站关键词添加后的后果前端开发入门薪水
  • 淮安网站建设费用网页设计与网站建设景点介绍
  • 做最优秀的自己的视频网站英文网站建设 深圳
  • 建站建设流程为什么招聘网站做不大
  • 阿里云服务器 个人网站分销系统开发多少费用
  • 重庆怎么做网站?苏州网站的优化
  • centos6.5 wordpress网站优化入门免费教程
  • 微信登录建设银行网站wordpress gif封面
  • 怎样创建网站的基本流程wordpress wp_head
  • 网站做seo需要哪些准备大良营销网站建设教程
  • 中国网站建设中心2_网站建设的一般步骤包含哪些
  • 企业网站需求方案wordpress友情链接美化
  • 网站建设与管理需要什么软件有哪些方面广东住房和城乡建设厅网站首页
  • soho建设外贸网站中铁建设集团招聘官网
  • wangz网站建设开发网站网页归档
  • 快速网站排名提升论文网站建设与运营
  • 贵州住房和城乡建设局网站沈阳网站建设设计报价
  • 南通通州区城乡建设局网站网站可以做外部链接吗
  • 我的世界做壁纸网站打不开自己做的网站如何管理
  • 营销型网站服务M97 网站建设网络公司整站源码
  • 展示形网站怎么建营销网址大全
  • 吉木萨尔县建设局网站wordpress网站聊天插件
  • 建设银行论坛网站福田附近公司做网站建设多少钱
  • 做棋牌网站合法吗国内做化妆刷的比较好的网站