diff --git a/SMS/.gitignore b/.gitignore similarity index 84% rename from SMS/.gitignore rename to .gitignore index 5edb4ee..9ee7913 100644 --- a/SMS/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ .DS_Store /build /captures -.externalNativeBuild +.externalNativeBuild \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..5acf5cb --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +bmob-android-demo-sms \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SMS/.idea/gradle.xml b/.idea/gradle.xml similarity index 89% rename from SMS/.idea/gradle.xml rename to .idea/gradle.xml index 7ac24c7..a9f4e52 100644 --- a/SMS/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,6 +3,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..bdd9278 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SMS.zip b/SMS.zip deleted file mode 100644 index 53baef7..0000000 Binary files a/SMS.zip and /dev/null differ diff --git a/SMS/.idea/caches/build_file_checksums.ser b/SMS/.idea/caches/build_file_checksums.ser deleted file mode 100644 index b47750b..0000000 Binary files a/SMS/.idea/caches/build_file_checksums.ser and /dev/null differ diff --git a/SMS/.idea/codeStyles/Project.xml b/SMS/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626..0000000 --- a/SMS/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SMS/.idea/misc.xml b/SMS/.idea/misc.xml deleted file mode 100644 index b0c7b20..0000000 --- a/SMS/.idea/misc.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/SMS/.idea/runConfigurations.xml b/SMS/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/SMS/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/SMS/app/.gitignore b/SMS/app/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/SMS/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/SMS/app/bmobsms.jks b/SMS/app/bmobsms.jks deleted file mode 100644 index a597093..0000000 Binary files a/SMS/app/bmobsms.jks and /dev/null differ diff --git a/SMS/app/build.gradle b/SMS/app/build.gradle deleted file mode 100644 index 3a59ba3..0000000 --- a/SMS/app/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 28 - defaultConfig { - applicationId "cn.bmob.sms" - minSdkVersion 15 - targetSdkVersion 28 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - lintOptions { - checkReleaseBuilds false - // Or, if you prefer, you can continue to check for errors in release builds, - // but continue the build even when errors are found: - abortOnError false - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - - /** - * bmob Data SDK - */ - implementation 'cn.bmob.android:bmob-sdk:3.6.7' - - /** - * ButterKnife - */ - implementation 'com.jakewharton:butterknife:8.8.1' - annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' -} diff --git a/SMS/app/release/app-release.apk b/SMS/app/release/app-release.apk deleted file mode 100644 index 573d23e..0000000 Binary files a/SMS/app/release/app-release.apk and /dev/null differ diff --git a/SMS/app/release/output.json b/SMS/app/release/output.json deleted file mode 100644 index 9f0c959..0000000 --- a/SMS/app/release/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] \ No newline at end of file diff --git a/SMS/app/src/main/AndroidManifest.xml b/SMS/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5312498..0000000 --- a/SMS/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SMS/app/src/main/java/cn/bmob/sms/App.java b/SMS/app/src/main/java/cn/bmob/sms/App.java deleted file mode 100644 index 9117173..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/App.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bmob.sms; - -import android.app.Application; - -import cn.bmob.v3.Bmob; - -/** - * Created on 18/9/25 10:42 - * - * @author zhangchaozhou - */ -public class App extends Application { - @Override - public void onCreate() { - super.onCreate(); -// Bmob.resetDomain("http://open-vip.bmob.cn/8/"); -// Bmob.initialize(this,"12784168944a56ae41c4575686b7b332"); - Bmob.initialize(this,"0a67093c2436a267e9bc52f27bc01dcf"); - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java deleted file mode 100644 index 7d2362e..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java +++ /dev/null @@ -1,121 +0,0 @@ -package cn.bmob.sms.activity; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.view.View; -import android.widget.Toast; - -import java.util.Arrays; -import java.util.List; - -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.CollectionList; -import cn.bmob.sms.DayBillBean; -import cn.bmob.sms.R; -import cn.bmob.sms.activity.user.UserLoginPasswordActivity; -import cn.bmob.sms.activity.user.UserLoginSmsActivity; -import cn.bmob.sms.activity.user.UserSignUpOrLoginSmsActivity; -import cn.bmob.sms.activity.user.UserSignUpPasswordActivity; -import cn.bmob.sms.activity.user.UserSignUpPasswordAndSmsActivity; -import cn.bmob.v3.BmobQuery; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.FindListener; -import cn.bmob.v3.listener.UpdateListener; - -/** - * @author zhangchaozhou - */ -public class MainActivity extends AppCompatActivity { - - - /** - * 本案例主要功能 - *

- * TODO 1、通常的短信验证:发送短信验证码->验证短信验证码->进行重要的用户操作。 - *

- * TODO 2、用户名密码注册 - *

- * TODO 3、手机号码注册或登录:发送短信验证码->验证短信验证码->若首次验证手机号码则进行注册并登录,若非首次验证手机号码则进行直接登录。 - *

- * TODO 4、用户名密码注册的同时绑定手机号码:发送短信验证码->验证短信验证码->进行用户名密码注册并登录,同时进行绑定手机号码。 - *

- * TODO 5、用户名密码登录。 - *

- * TODO 6、短信验证码登录。 - *

- * TODO 7、注册登录之后进行绑定或解绑手机号码:发送短信验证码->验证短信验证码->进行手机号码的绑定或解绑操作。 - *

- * TODO 8、注册登录之后进行短信验证密码重置:发送短信验证码->验证短信验证码->进行密码重置。 - *

- * TODO 9、注册登录之后进行原始密码重置。 - */ - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - ButterKnife.bind(this); - } - - - @OnClick({R.id.btn_test, R.id.btn_normal, R.id.btn_user_signup_password, R.id.btn_signup_or_login_sms, R.id.btn_user_signup_password_and_sms, R.id.btn_user_login_password, R.id.btn_user_login_sms}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_test: -// DayBillBean dayBillBean = new DayBillBean(); -// -// dayBillBean.removeAll("listData", Arrays.asList(new DayBillBean.BillBean( -// "支出", "600.00", "2018-11-02", "知识付费", "现金", "", "自己", "357d922f0b"))); -// dayBillBean.update("357d922f0b", new UpdateListener() { -// @Override -// public void done(BmobException e) { -// -// if (e==null){ -// Log.e("done","SUCCESS"); -// Toast.makeText(MainActivity.this, "SUCCESS", Toast.LENGTH_SHORT).show(); -// }else { -// -// Log.e("done",e.getMessage()); -// } -// } -// }); - - BmobQuery bmobQuery = new BmobQuery<>(); - bmobQuery.findObjects(new FindListener() { - @Override - public void done(List list, BmobException e) { - if (e==null){ - Log.e("done",list==null?"null":list.size()+""); - }else { - Log.e("error",e.getMessage()); - } - } - }); - break; - case R.id.btn_normal: - startActivity(new Intent(this, NormalActivity.class)); - break; - case R.id.btn_user_signup_password: - startActivity(new Intent(this, UserSignUpPasswordActivity.class)); - break; - case R.id.btn_signup_or_login_sms: - startActivity(new Intent(this, UserSignUpOrLoginSmsActivity.class)); - break; - case R.id.btn_user_signup_password_and_sms: - startActivity(new Intent(this, UserSignUpPasswordAndSmsActivity.class)); - break; - case R.id.btn_user_login_password: - startActivity(new Intent(this, UserLoginPasswordActivity.class)); - break; - case R.id.btn_user_login_sms: - startActivity(new Intent(this, UserLoginSmsActivity.class)); - break; - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java deleted file mode 100644 index 1a43d52..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java +++ /dev/null @@ -1,111 +0,0 @@ -package cn.bmob.sms.activity; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.v3.Bmob; -import cn.bmob.v3.BmobInstallation; -import cn.bmob.v3.BmobInstallationManager; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.InstallationListener; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.QueryListener; -import cn.bmob.v3.listener.UpdateListener; - -/** - * Created on 18/9/25 16:05 - * - * @author zhangchaozhou - */ -public class NormalActivity extends AppCompatActivity { - - - @BindView(R.id.edt_phone) - EditText mEdtPhone; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_normal); - ButterKnife.bind(this); - - Bmob.resetDomain("http://open-vip.bmob.cn/8/"); - - BmobInstallationManager.getInstance().initialize(new InstallationListener() { - @Override - public void done(BmobInstallation bmobInstallation, BmobException e) { - - } - }); - } - - @OnClick({R.id.btn_send, R.id.btn_verify}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - * - * TODO 应用名称以及自定义短信内容,请使用不会被和谐的文字,防止发送短信验证码失败。 - * - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - case R.id.btn_verify: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - BmobSMS.verifySmsCode(phone, code, new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("验证码验证成功,您可以在此时进行重要操作!\n"); - } else { - mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java deleted file mode 100644 index 1573104..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java +++ /dev/null @@ -1,120 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.sms.bean.User; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.QueryListener; -import cn.bmob.v3.listener.UpdateListener; - -/** - * Created on 18/9/26 09:40 - * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户 - * - * @author zhangchaozhou - */ -public class UserBindActivity extends AppCompatActivity { - - - @BindView(R.id.edt_phone) - EditText mEdtPhone; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_bind); - ButterKnife.bind(this); - } - - @OnClick({R.id.btn_send, R.id.btn_bind}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - User user = BmobUser.getCurrentUser(User.class); - String phone = user.getMobilePhoneNumber(); - Boolean verify = user.getMobilePhoneNumberVerified(); - if (!TextUtils.isEmpty(phone) && verify != null && verify) { - Toast.makeText(this, "当前账号已经绑定了手机号码", Toast.LENGTH_SHORT).show(); - return; - }else { - final String phoneInput = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phoneInput)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phoneInput, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - } - - break; - } - case R.id.btn_bind: { - final String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - BmobSMS.verifySmsCode(phone, code, new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("验证码验证成功,您可以在此时进行绑定操作!\n"); - User user = BmobUser.getCurrentUser(User.class); - user.setMobilePhoneNumber(phone); - user.setMobilePhoneNumberVerified(true); - user.update(new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("绑定手机号码成功"); - } else { - mTvInfo.append("绑定手机号码失败:" + e.getErrorCode() + "-" + e.getMessage()); - } - } - }); - } else { - mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java deleted file mode 100644 index ed07a15..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.LogInListener; -import cn.bmob.v3.listener.QueryListener; - -/** - * Created on 18/9/26 09:39 - * TODO 通过短信登录,只针对已经通过短信验证注册的用户 - * - * @author zhangchaozhou - */ -public class UserLoginSmsActivity extends AppCompatActivity { - @BindView(R.id.edt_phone) - EditText mEdtPhone; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_login_sms); - ButterKnife.bind(this); - } - - @OnClick({R.id.btn_send, R.id.btn_login}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - case R.id.btn_login: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO 此API需要在用户已经注册并验证的前提下才能使用 - */ - BmobUser.loginBySMSCode(phone, code, new LogInListener() { - @Override - public void done(BmobUser bmobUser, BmobException e) { - if (e == null) { - mTvInfo.append("短信登录成功:" + bmobUser.getObjectId() + "-" + bmobUser.getUsername()); - startActivity(new Intent(UserLoginSmsActivity.this, UserMainActivity.class)); - } else { - mTvInfo.append("短信登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java deleted file mode 100644 index 472a23e..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.view.View; - -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.v3.BmobUser; - -/** - * Created on 18/9/26 09:52 - * TODO 用户登录后首页 - * @author zhangchaozhou - */ -public class UserMainActivity extends AppCompatActivity { - - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_main); - ButterKnife.bind(this); - } - - @OnClick({R.id.btn_reset_password, R.id.btn_reset_sms, R.id.btn_bind, R.id.btn_unbind, R.id.btn_exit}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_reset_password: - startActivity(new Intent(this,UserResetPasswordActivity.class)); - break; - case R.id.btn_reset_sms: - startActivity(new Intent(this,UserResetSmsActivity.class)); - break; - case R.id.btn_bind: - startActivity(new Intent(this,UserBindActivity.class)); - break; - case R.id.btn_unbind: - startActivity(new Intent(this,UserUnBindActivity.class)); - break; - case R.id.btn_exit: - BmobUser.logOut(); - finish(); - break; - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java deleted file mode 100644 index a29d338..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.sms.bean.User; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.QueryListener; -import cn.bmob.v3.listener.UpdateListener; - -/** - * Created on 18/9/26 09:39 - * TODO 通过短信重置密码,只针对已经通过密码注册并且通过短信验证绑定的用户 - * - * @author zhangchaozhou - */ -public class UserResetSmsActivity extends AppCompatActivity { - - @BindView(R.id.edt_new_password) - EditText mEdtNewPassword; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_reset_sms); - ButterKnife.bind(this); - } - - @OnClick({R.id.btn_send, R.id.btn_reset}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: - User user = BmobUser.getCurrentUser(User.class); - String phone = user.getMobilePhoneNumber(); - Boolean verify = user.getMobilePhoneNumberVerified(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show(); - return; - } - if (verify == null || !verify) { - Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - case R.id.btn_reset: - String newPassword = mEdtNewPassword.getText().toString().trim(); - if (TextUtils.isEmpty(newPassword)) { - Toast.makeText(this, "请输入新密码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - BmobUser.resetPasswordBySMSCode(code, newPassword, new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("重置成功"); - } else { - mTvInfo.append("重置失败:" + e.getErrorCode() + "-" + e.getMessage()); - } - } - }); - break; - - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java deleted file mode 100644 index ea44df5..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.LogInListener; -import cn.bmob.v3.listener.QueryListener; - -/** - * Created on 18/9/25 16:12 - * TODO 通过短信验证注册或登录 - * - * @author zhangchaozhou - */ -public class UserSignUpOrLoginSmsActivity extends AppCompatActivity { - - - @BindView(R.id.edt_phone) - EditText mEdtPhone; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_signup_or_login_sms); - ButterKnife.bind(this); - - } - - - @OnClick({R.id.btn_send, R.id.btn_signup_or_login}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - case R.id.btn_signup_or_login: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - BmobUser.signOrLoginByMobilePhone(phone, code, new LogInListener() { - @Override - public void done(BmobUser bmobUser, BmobException e) { - if (e == null) { - mTvInfo.append("短信注册或登录成功:" + bmobUser.getUsername()); - startActivity(new Intent(UserSignUpOrLoginSmsActivity.this, UserMainActivity.class)); - } else { - mTvInfo.append("短信注册或登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java deleted file mode 100644 index 8e65588..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.sms.bean.User; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.QueryListener; -import cn.bmob.v3.listener.SaveListener; - -/** - * Created on 18/9/25 16:23 - * TODO 通过密码注册并通过短信验证绑定手机号码 - * @author zhangchaozhou - */ -public class UserSignUpPasswordAndSmsActivity extends AppCompatActivity{ - - - @BindView(R.id.edt_username) - EditText mEdtUsername; - @BindView(R.id.edt_password) - EditText mEdtPassword; - @BindView(R.id.edt_nickname) - EditText mEdtNickname; - @BindView(R.id.edt_phone) - EditText mEdtPhone; - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_signup_password_and_sms); - ButterKnife.bind(this); - } - - - - @OnClick({R.id.btn_send, R.id.btn_signup}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - case R.id.btn_signup: { - String username = mEdtUsername.getText().toString().trim(); - if (TextUtils.isEmpty(username)) { - Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); - return; - } - String nickname = mEdtNickname.getText().toString().trim(); - if (TextUtils.isEmpty(nickname)) { - Toast.makeText(this, "请输入昵称", Toast.LENGTH_SHORT).show(); - return; - } - String password = mEdtPassword.getText().toString().trim(); - if (TextUtils.isEmpty(password)) { - Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show(); - return; - } - String phone = mEdtPhone.getText().toString().trim(); - if (TextUtils.isEmpty(phone)) { - Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); - return; - } - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - User user = new User(); - //TODO 设置手机号码(必填) - user.setMobilePhoneNumber(phone); - //TODO 设置用户名,如果没有传用户名,则默认为手机号码 - user.setUsername(username); - //TODO 设置用户密码 - user.setPassword(password); - //TODO 设置额外信息:此处为昵称 - user.setNickname(nickname); - user.signOrLogin(code, new SaveListener() { - @Override - public void done(BmobUser bmobUser, BmobException e) { - if (e == null) { - mTvInfo.append("短信注册成功:" + bmobUser.getUsername()); - startActivity(new Intent(UserSignUpPasswordAndSmsActivity.this, UserMainActivity.class)); - } else { - mTvInfo.append("短信注册失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - default: - break; - } - } -} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java deleted file mode 100644 index e35c92f..0000000 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java +++ /dev/null @@ -1,108 +0,0 @@ -package cn.bmob.sms.activity.user; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import cn.bmob.sms.R; -import cn.bmob.sms.bean.User; -import cn.bmob.v3.BmobSMS; -import cn.bmob.v3.BmobUser; -import cn.bmob.v3.exception.BmobException; -import cn.bmob.v3.listener.QueryListener; -import cn.bmob.v3.listener.UpdateListener; - -/** - * Created on 18/9/26 09:40 - * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户 - * - * @author zhangchaozhou - */ -public class UserUnBindActivity extends AppCompatActivity { - - - @BindView(R.id.edt_code) - EditText mEdtCode; - @BindView(R.id.tv_info) - TextView mTvInfo; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_user_unbind); - ButterKnife.bind(this); - } - - @OnClick({R.id.btn_send, R.id.btn_unbind}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.btn_send: { - User user = BmobUser.getCurrentUser(User.class); - String phone = user.getMobilePhoneNumber(); - Boolean verify = user.getMobilePhoneNumberVerified(); - if (TextUtils.isEmpty(phone) || verify == null || !verify) { - Toast.makeText(this, "当前账号尚未绑定手机号码", Toast.LENGTH_SHORT).show(); - return; - } - /** - * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 - */ - BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { - @Override - public void done(Integer smsId, BmobException e) { - if (e == null) { - mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); - } else { - mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - case R.id.btn_unbind: { - User user = BmobUser.getCurrentUser(User.class); - final String phone = user.getMobilePhoneNumber(); - String code = mEdtCode.getText().toString().trim(); - if (TextUtils.isEmpty(code)) { - Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); - return; - } - BmobSMS.verifySmsCode(phone, code, new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("验证码验证成功,您可以在此时进行解绑操作!\n"); - User user = BmobUser.getCurrentUser(User.class); - user.setMobilePhoneNumber(""); - user.setMobilePhoneNumberVerified(false); - user.update(new UpdateListener() { - @Override - public void done(BmobException e) { - if (e == null) { - mTvInfo.append("解绑手机号码成功"); - } else { - mTvInfo.append("解绑手机号码失败:" + e.getErrorCode() + "-" + e.getMessage()); - } - } - }); - } else { - mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); - } - } - }); - break; - } - - default: - break; - } - } -} diff --git a/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index c3903ed..0000000 --- a/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f5908..0000000 Binary files a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b52399..0000000 Binary files a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd..0000000 Binary files a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c7..0000000 Binary files a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd8..0000000 Binary files a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca60..0000000 Binary files a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe..0000000 Binary files a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b41..0000000 Binary files a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebd..0000000 Binary files a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13..0000000 Binary files a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/SMS/app/src/main/res/values/colors.xml b/SMS/app/src/main/res/values/colors.xml deleted file mode 100644 index 3ab3e9c..0000000 --- a/SMS/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #3F51B5 - #303F9F - #FF4081 - diff --git a/SMS/app/src/main/res/values/strings.xml b/SMS/app/src/main/res/values/strings.xml deleted file mode 100644 index 1710f42..0000000 --- a/SMS/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - SMS - diff --git a/SMS/app/src/main/res/values/styles.xml b/SMS/app/src/main/res/values/styles.xml deleted file mode 100644 index 5885930..0000000 --- a/SMS/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/SMS/build.gradle b/SMS/build.gradle deleted file mode 100644 index 5608268..0000000 --- a/SMS/build.gradle +++ /dev/null @@ -1,32 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - - repositories { - google() - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' - - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - jcenter() - - /** - * bmob SDK 仓库 - */ - maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" } - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/SMS/gradle/wrapper/gradle-wrapper.jar b/SMS/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7a3265e..0000000 Binary files a/SMS/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/SMS/settings.gradle b/SMS/settings.gradle deleted file mode 100644 index e7b4def..0000000 --- a/SMS/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':app' diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..3101ea4 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'com.android.application' +} + +android { + namespace 'cn.bmob.sms' + compileSdk 32 + + defaultConfig { + applicationId "cn.bmob.sms" + minSdk 26 + targetSdk 32 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation 'io.github.bmob:android-sdk:3.8.21' + implementation 'io.reactivex.rxjava2:rxjava:2.2.8' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'com.squareup.okhttp3:okhttp:4.8.1' + implementation 'com.google.code.gson:gson:2.8.5' + + implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'com.google.android.material:material:1.5.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/SMS/app/proguard-rules.pro b/app/proguard-rules.pro similarity index 94% rename from SMS/app/proguard-rules.pro rename to app/proguard-rules.pro index f1b4245..481bb43 100644 --- a/SMS/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java b/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java similarity index 71% rename from SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java rename to app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java index af5f212..147f5fe 100644 --- a/SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java @@ -1,8 +1,9 @@ package cn.bmob.sms; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; @@ -19,8 +20,7 @@ public class ExampleInstrumentedTest { @Test public void useAppContext() { // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); assertEquals("cn.bmob.sms", appContext.getPackageName()); } -} +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..34aff26 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/cn/bmob/sms/App.java b/app/src/main/java/cn/bmob/sms/App.java new file mode 100644 index 0000000..6b3f2e9 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/App.java @@ -0,0 +1,13 @@ +package cn.bmob.sms; + +import android.app.Application; + +import cn.bmob.v3.Bmob; + +public class App extends Application { + @Override + public void onCreate() { + super.onCreate(); + Bmob.initialize(this,"Your Application ID"); + } +} diff --git a/SMS/app/src/main/java/cn/bmob/sms/CollectionList.java b/app/src/main/java/cn/bmob/sms/CollectionList.java similarity index 100% rename from SMS/app/src/main/java/cn/bmob/sms/CollectionList.java rename to app/src/main/java/cn/bmob/sms/CollectionList.java diff --git a/SMS/app/src/main/java/cn/bmob/sms/DayBillBean.java b/app/src/main/java/cn/bmob/sms/DayBillBean.java similarity index 100% rename from SMS/app/src/main/java/cn/bmob/sms/DayBillBean.java rename to app/src/main/java/cn/bmob/sms/DayBillBean.java diff --git a/app/src/main/java/cn/bmob/sms/activity/MainActivity.java b/app/src/main/java/cn/bmob/sms/activity/MainActivity.java new file mode 100644 index 0000000..5d5f2e4 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/MainActivity.java @@ -0,0 +1,95 @@ +package cn.bmob.sms.activity; + +import android.content.Intent; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.util.Log; +import android.view.View; + +import java.util.List; + +import cn.bmob.sms.CollectionList; +import cn.bmob.sms.R; +import cn.bmob.sms.activity.user.UserLoginPasswordActivity; +import cn.bmob.sms.activity.user.UserLoginSmsActivity; +import cn.bmob.sms.activity.user.UserSignUpOrLoginSmsActivity; +import cn.bmob.sms.activity.user.UserSignUpPasswordActivity; +import cn.bmob.sms.activity.user.UserSignUpPasswordAndSmsActivity; +import cn.bmob.v3.BmobQuery; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.FindListener; + +/** + * @author zhangchaozhou + */ +public class MainActivity extends AppCompatActivity { + + + /** + * 本案例主要功能 + *

+ * TODO 1、通常的短信验证:发送短信验证码->验证短信验证码->进行重要的用户操作。 + *

+ * TODO 2、用户名密码注册 + *

+ * TODO 3、手机号码注册或登录:发送短信验证码->验证短信验证码->若首次验证手机号码则进行注册并登录,若非首次验证手机号码则进行直接登录。 + *

+ * TODO 4、用户名密码注册的同时绑定手机号码:发送短信验证码->验证短信验证码->进行用户名密码注册并登录,同时进行绑定手机号码。 + *

+ * TODO 5、用户名密码登录。 + *

+ * TODO 6、短信验证码登录。 + *

+ * TODO 7、注册登录之后进行绑定或解绑手机号码:发送短信验证码->验证短信验证码->进行手机号码的绑定或解绑操作。 + *

+ * TODO 8、注册登录之后进行短信验证密码重置:发送短信验证码->验证短信验证码->进行密码重置。 + *

+ * TODO 9、注册登录之后进行原始密码重置。 + */ + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } + + public void onTest(View view) { + BmobQuery bmobQuery = new BmobQuery<>(); + bmobQuery.findObjects(new FindListener() { + @Override + public void done(List list, BmobException e) { + if (e==null){ + Log.e("done",list==null?"null":list.size()+""); + }else { + Log.e("error",e.getMessage()); + } + } + }); + } + + public void onNormal(View view) { + startActivity(new Intent(this, NormalActivity.class)); + } + + public void onUserSignupPassword(View view) { + startActivity(new Intent(this, UserSignUpPasswordActivity.class)); + } + + public void onSignupOrLoginSms(View view) { + startActivity(new Intent(this, UserSignUpOrLoginSmsActivity.class)); + } + + public void onUserSignupPasswordAndSms(View view) { + startActivity(new Intent(this, UserSignUpPasswordAndSmsActivity.class)); + } + + public void onUserLoginPassword(View view) { + startActivity(new Intent(this, UserLoginPasswordActivity.class)); + } + + public void onUserLoginSms(View view) { + startActivity(new Intent(this, UserLoginSmsActivity.class)); + } + +} diff --git a/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java b/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java new file mode 100644 index 0000000..e382bc8 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java @@ -0,0 +1,96 @@ +package cn.bmob.sms.activity; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.bmob.sms.R; +import cn.bmob.v3.Bmob; +import cn.bmob.v3.BmobInstallation; +import cn.bmob.v3.BmobInstallationManager; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.InstallationListener; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.QueryListener; +import cn.bmob.v3.listener.UpdateListener; + +/** + * Created on 18/9/25 16:05 + * + * @author zhangchaozhou + */ +public class NormalActivity extends AppCompatActivity { + + EditText mEdtPhone; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_normal); + mEdtPhone = findViewById(R.id.edt_phone); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + + Bmob.resetDomain("http://open-vip.bmob.cn/8/"); + + BmobInstallationManager.getInstance().initialize(new InstallationListener() { + @Override + public void done(BmobInstallation bmobInstallation, BmobException e) { + + } + }); + } + + public void onSendSMSCode(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + * + * TODO 应用名称以及自定义短信内容,请使用不会被和谐的文字,防止发送短信验证码失败。 + * + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onVerify(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + BmobSMS.verifySmsCode(phone, code, new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("验证码验证成功,您可以在此时进行重要操作!\n"); + } else { + mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java new file mode 100644 index 0000000..d97cad9 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java @@ -0,0 +1,105 @@ +package cn.bmob.sms.activity.user; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.bmob.sms.R; +import cn.bmob.sms.bean.User; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.QueryListener; +import cn.bmob.v3.listener.UpdateListener; + +/** + * Created on 18/9/26 09:40 + * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户 + * + * @author zhangchaozhou + */ +public class UserBindActivity extends AppCompatActivity { + + + EditText mEdtPhone; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_bind); + mEdtPhone = findViewById(R.id.edt_phone); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + User user = BmobUser.getCurrentUser(User.class); + String phone = user.getMobilePhoneNumber(); + Boolean verify = user.getMobilePhoneNumberVerified(); + if (!TextUtils.isEmpty(phone) && verify != null && verify) { + Toast.makeText(this, "当前账号已经绑定了手机号码", Toast.LENGTH_SHORT).show(); + return; + }else { + final String phoneInput = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phoneInput)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phoneInput, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + } + + public void onBind(View view) { + final String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + BmobSMS.verifySmsCode(phone, code, new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("验证码验证成功,您可以在此时进行绑定操作!\n"); + User user = BmobUser.getCurrentUser(User.class); + user.setMobilePhoneNumber(phone); + user.setMobilePhoneNumberVerified(true); + user.update(new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("绑定手机号码成功"); + } else { + mTvInfo.append("绑定手机号码失败:" + e.getErrorCode() + "-" + e.getMessage()); + } + } + }); + } else { + mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java similarity index 80% rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java rename to app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java index eb605fc..bab548d 100644 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java @@ -2,16 +2,13 @@ import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; +import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; import cn.bmob.sms.R; import cn.bmob.sms.bean.User; import cn.bmob.v3.exception.BmobException; @@ -24,22 +21,20 @@ * @author zhangchaozhou */ public class UserLoginPasswordActivity extends AppCompatActivity { - @BindView(R.id.edt_username) EditText mEdtUsername; - @BindView(R.id.edt_password) EditText mEdtPassword; - @BindView(R.id.tv_info) TextView mTvInfo; @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_login_password); - ButterKnife.bind(this); + mEdtUsername = findViewById(R.id.edt_username); + mEdtPassword = findViewById(R.id.edt_password); + mTvInfo = findViewById(R.id.tv_info); } - @OnClick(R.id.btn_login) - public void onViewClicked() { + public void onLogin(View view) { String username = mEdtUsername.getText().toString().trim(); if (TextUtils.isEmpty(username)) { Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java new file mode 100644 index 0000000..b43a17d --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java @@ -0,0 +1,86 @@ +package cn.bmob.sms.activity.user; + +import android.content.Intent; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.bmob.sms.R; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.LogInListener; +import cn.bmob.v3.listener.QueryListener; + +/** + * Created on 18/9/26 09:39 + * TODO 通过短信登录,只针对已经通过短信验证注册的用户 + * + * @author zhangchaozhou + */ +public class UserLoginSmsActivity extends AppCompatActivity { + EditText mEdtPhone; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_login_sms); + mEdtPhone = findViewById(R.id.edt_phone); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onLogin(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO 此API需要在用户已经注册并验证的前提下才能使用 + */ + BmobUser.loginBySMSCode(phone, code, new LogInListener() { + @Override + public void done(BmobUser bmobUser, BmobException e) { + if (e == null) { + mTvInfo.append("短信登录成功:" + bmobUser.getObjectId() + "-" + bmobUser.getUsername()); + startActivity(new Intent(UserLoginSmsActivity.this, UserMainActivity.class)); + } else { + mTvInfo.append("短信登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java new file mode 100644 index 0000000..21243c3 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java @@ -0,0 +1,44 @@ +package cn.bmob.sms.activity.user; + +import android.content.Intent; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.view.View; + +import cn.bmob.sms.R; +import cn.bmob.v3.BmobUser; + +/** + * Created on 18/9/26 09:52 + * TODO 用户登录后首页 + * @author zhangchaozhou + */ +public class UserMainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_main); + } + + public void toResetPassword(View view) { + startActivity(new Intent(this,UserResetPasswordActivity.class)); + } + + public void toResetSms(View view) { + startActivity(new Intent(this,UserResetSmsActivity.class)); + } + + public void toBind(View view) { + startActivity(new Intent(this,UserBindActivity.class)); + } + + public void toUnBind(View view) { + startActivity(new Intent(this,UserUnBindActivity.class)); + } + + public void onExit(View view) { + BmobUser.logOut(); + finish(); + } +} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java similarity index 78% rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java rename to app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java index b12a6e5..3a22aff 100644 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java @@ -1,16 +1,13 @@ package cn.bmob.sms.activity.user; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; +import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; import cn.bmob.sms.R; import cn.bmob.v3.BmobUser; import cn.bmob.v3.exception.BmobException; @@ -24,22 +21,20 @@ */ public class UserResetPasswordActivity extends AppCompatActivity { - @BindView(R.id.edt_origin_password) EditText mEdtOriginPassword; - @BindView(R.id.edt_new_password) EditText mEdtNewPassword; - @BindView(R.id.tv_info) TextView mTvInfo; @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_reset_password); - ButterKnife.bind(this); + mEdtOriginPassword = findViewById(R.id.edt_origin_password); + mEdtNewPassword = findViewById(R.id.edt_new_password); + mTvInfo = findViewById(R.id.tv_info); } - @OnClick(R.id.btn_reset) - public void onViewClicked() { + public void onReset(View view) { String originPassword = mEdtOriginPassword.getText().toString().trim(); if (TextUtils.isEmpty(originPassword)) { Toast.makeText(this, "请输入原始密码", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java new file mode 100644 index 0000000..0b2d940 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java @@ -0,0 +1,89 @@ +package cn.bmob.sms.activity.user; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.bmob.sms.R; +import cn.bmob.sms.bean.User; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.QueryListener; +import cn.bmob.v3.listener.UpdateListener; + +/** + * Created on 18/9/26 09:39 + * TODO 通过短信重置密码,只针对已经通过密码注册并且通过短信验证绑定的用户 + * + * @author zhangchaozhou + */ +public class UserResetSmsActivity extends AppCompatActivity { + + EditText mEdtNewPassword; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_reset_sms); + mEdtNewPassword = findViewById(R.id.edt_new_password); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + User user = BmobUser.getCurrentUser(User.class); + String phone = user.getMobilePhoneNumber(); + Boolean verify = user.getMobilePhoneNumberVerified(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show(); + return; + } + if (verify == null || !verify) { + Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onReset(View view) { + String newPassword = mEdtNewPassword.getText().toString().trim(); + if (TextUtils.isEmpty(newPassword)) { + Toast.makeText(this, "请输入新密码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + BmobUser.resetPasswordBySMSCode(code, newPassword, new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("重置成功"); + } else { + mTvInfo.append("重置失败:" + e.getErrorCode() + "-" + e.getMessage()); + } + } + }); + } +} diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java new file mode 100644 index 0000000..e1ce315 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java @@ -0,0 +1,84 @@ +package cn.bmob.sms.activity.user; + +import android.content.Intent; +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.bmob.sms.R; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.LogInListener; +import cn.bmob.v3.listener.QueryListener; + +/** + * Created on 18/9/25 16:12 + * TODO 通过短信验证注册或登录 + * + * @author zhangchaozhou + */ +public class UserSignUpOrLoginSmsActivity extends AppCompatActivity { + + EditText mEdtPhone; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_signup_or_login_sms); + mEdtPhone = findViewById(R.id.edt_phone); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onSignupOrLogin(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + BmobUser.signOrLoginByMobilePhone(phone, code, new LogInListener() { + @Override + public void done(BmobUser bmobUser, BmobException e) { + if (e == null) { + mTvInfo.append("短信注册或登录成功:" + bmobUser.getUsername()); + startActivity(new Intent(UserSignUpOrLoginSmsActivity.this, UserMainActivity.class)); + } else { + mTvInfo.append("短信注册或登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java similarity index 80% rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java rename to app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java index bb6c0cc..fc28e5a 100644 --- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java @@ -2,16 +2,13 @@ import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; +import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; import cn.bmob.sms.R; import cn.bmob.sms.bean.User; import cn.bmob.v3.exception.BmobException; @@ -24,22 +21,20 @@ * @author zhangchaozhou */ public class UserSignUpPasswordActivity extends AppCompatActivity { - @BindView(R.id.edt_username) EditText mEdtUsername; - @BindView(R.id.edt_password) EditText mEdtPassword; - @BindView(R.id.tv_info) TextView mTvInfo; @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_signup_password); - ButterKnife.bind(this); + mEdtUsername = findViewById(R.id.edt_username); + mEdtPassword = findViewById(R.id.edt_password); + mTvInfo = findViewById(R.id.tv_info); } - @OnClick(R.id.btn_signup) - public void onViewClicked() { + public void onSignup(View view) { String username = mEdtUsername.getText().toString().trim(); if (TextUtils.isEmpty(username)) { Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java new file mode 100644 index 0000000..f1d3b1c --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java @@ -0,0 +1,115 @@ +package cn.bmob.sms.activity.user; + +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import cn.bmob.sms.R; +import cn.bmob.sms.bean.User; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.QueryListener; +import cn.bmob.v3.listener.SaveListener; + +/** + * Created on 18/9/25 16:23 + * TODO 通过密码注册并通过短信验证绑定手机号码 + * @author zhangchaozhou + */ +public class UserSignUpPasswordAndSmsActivity extends AppCompatActivity { + + EditText mEdtUsername; + EditText mEdtPassword; + EditText mEdtNickname; + EditText mEdtPhone; + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_signup_password_and_sms); + mEdtUsername = findViewById(R.id.edt_username); + mEdtPassword = findViewById(R.id.edt_password); + mEdtNickname = findViewById(R.id.edt_nickname); + mEdtPhone = findViewById(R.id.edt_phone); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onSignup(View view) { + String username = mEdtUsername.getText().toString().trim(); + if (TextUtils.isEmpty(username)) { + Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); + return; + } + String nickname = mEdtNickname.getText().toString().trim(); + if (TextUtils.isEmpty(nickname)) { + Toast.makeText(this, "请输入昵称", Toast.LENGTH_SHORT).show(); + return; + } + String password = mEdtPassword.getText().toString().trim(); + if (TextUtils.isEmpty(password)) { + Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show(); + return; + } + String phone = mEdtPhone.getText().toString().trim(); + if (TextUtils.isEmpty(phone)) { + Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show(); + return; + } + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + User user = new User(); + //TODO 设置手机号码(必填) + user.setMobilePhoneNumber(phone); + //TODO 设置用户名,如果没有传用户名,则默认为手机号码 + user.setUsername(username); + //TODO 设置用户密码 + user.setPassword(password); + //TODO 设置额外信息:此处为昵称 + user.setNickname(nickname); + user.signOrLogin(code, new SaveListener() { + @Override + public void done(BmobUser bmobUser, BmobException e) { + if (e == null) { + mTvInfo.append("短信注册成功:" + bmobUser.getUsername()); + startActivity(new Intent(UserSignUpPasswordAndSmsActivity.this, UserMainActivity.class)); + } else { + mTvInfo.append("短信注册失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java new file mode 100644 index 0000000..c4e1c99 --- /dev/null +++ b/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java @@ -0,0 +1,94 @@ +package cn.bmob.sms.activity.user; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import cn.bmob.sms.R; +import cn.bmob.sms.bean.User; +import cn.bmob.v3.BmobSMS; +import cn.bmob.v3.BmobUser; +import cn.bmob.v3.exception.BmobException; +import cn.bmob.v3.listener.QueryListener; +import cn.bmob.v3.listener.UpdateListener; + +/** + * Created on 18/9/26 09:40 + * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户 + * + * @author zhangchaozhou + */ +public class UserUnBindActivity extends AppCompatActivity { + + EditText mEdtCode; + TextView mTvInfo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_unbind); + mEdtCode = findViewById(R.id.edt_code); + mTvInfo = findViewById(R.id.tv_info); + } + + public void onSend(View view) { + User user = BmobUser.getCurrentUser(User.class); + String phone = user.getMobilePhoneNumber(); + Boolean verify = user.getMobilePhoneNumberVerified(); + if (TextUtils.isEmpty(phone) || verify == null || !verify) { + Toast.makeText(this, "当前账号尚未绑定手机号码", Toast.LENGTH_SHORT).show(); + return; + } + /** + * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。 + */ + BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() { + @Override + public void done(Integer smsId, BmobException e) { + if (e == null) { + mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n"); + } else { + mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } + + public void onUnbind(View view) { + User user = BmobUser.getCurrentUser(User.class); + final String phone = user.getMobilePhoneNumber(); + String code = mEdtCode.getText().toString().trim(); + if (TextUtils.isEmpty(code)) { + Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); + return; + } + BmobSMS.verifySmsCode(phone, code, new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("验证码验证成功,您可以在此时进行解绑操作!\n"); + User user = BmobUser.getCurrentUser(User.class); + user.setMobilePhoneNumber(""); + user.setMobilePhoneNumberVerified(false); + user.update(new UpdateListener() { + @Override + public void done(BmobException e) { + if (e == null) { + mTvInfo.append("解绑手机号码成功"); + } else { + mTvInfo.append("解绑手机号码失败:" + e.getErrorCode() + "-" + e.getMessage()); + } + } + }); + } else { + mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n"); + } + } + }); + } +} diff --git a/SMS/app/src/main/java/cn/bmob/sms/bean/User.java b/app/src/main/java/cn/bmob/sms/bean/User.java similarity index 100% rename from SMS/app/src/main/java/cn/bmob/sms/bean/User.java rename to app/src/main/java/cn/bmob/sms/bean/User.java diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/SMS/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml similarity index 52% rename from SMS/app/src/main/res/drawable/ic_launcher_background.xml rename to app/src/main/res/drawable/ic_launcher_background.xml index 5713f34..07d5da9 100644 --- a/SMS/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,171 +1,170 @@ - + android:viewportWidth="108" + android:viewportHeight="108"> + android:fillColor="#3DDC84" + android:pathData="M0,0h108v108h-108z" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> + android:strokeWidth="0.8" + android:strokeColor="#33FFFFFF" /> diff --git a/SMS/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml similarity index 81% rename from SMS/app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/activity_main.xml index 517332c..c55de24 100644 --- a/SMS/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,10 +1,10 @@ + android:onClick="onNormal" + android:text="验证手机号码执行重要操作" /> + android:onClick="onUserSignupPassword" + android:text="用户名密码注册" /> + android:onClick="onSignupOrLoginSms" + android:text="验证手机号码注册或登录" />