在短视频APP源码开发时,要实现APP间的授权登录,例如用微信或QQ等信息登录短视频APP源码。
1,实现短视频APP源码开发时,APP间相互调起
2,拉起指定的授权页面(SignActivity)
3,应用间数据相互传递
二A应用(调用者)业务代码与布局
调用者A,MainActivity 页面代码
MainActivity简单一个发起授权按钮,下面是相关逻辑,博主面向不同读者做了统一适配,详细3步注释如下
1,注册按钮与事件,发起事件核心代码intent.setData(Uri.parse(mUri))
2,注册广播,核心代码 intentFilter.addAction(“kx.com.kx.b.sign”) ,action读者可自行定义
3,接收广播回调回来的参数,进行处理
public class MainActivity extends AppCompatActivity {
private Button mBt;
// com.kx.b 是B授权包名,如果读者Uri调起APP不熟悉,请查阅Uri拉起APP相关知识点,博主有时间的话,会在下篇补上相关知识点
private String mUri = "kx://com.kx.b/sign?type=1&user_package_name=com.kx.b";
private MyBroadcastReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//操作1 按钮发起
mBt = findViewById(R.id.bt);
mBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setData(Uri.parse(mUri));//参数拼接在URI后面 type=1是授权页面,user_package_name使用者包名,后续参数可自行添加
intent.putExtra("", "");//这里Intent也可传递参数,但是一般情况下都会放到上面的URL中进行传递
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
//操作2
//注册广播接受者,接收授权成功返回广播信息
mReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
//kx.com.kx.b.sign 自行定义action 即可
intentFilter.addAction("kx.com.kx.b.sign");
registerReceiver(mReceiver, intentFilter);
}
//操作3
//BroadcastReceiver 接收授权成功返回广播信息,TODO
private class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 授权成功 返回token,app_pkg
Toast.makeText(MainActivity.this,"授权成功!",Toast.LENGTH_SHORT).show();
final String token = intent.getStringExtra("token");
final String app_pkg = intent.getStringExtra("app_pkg");
mBt.setText("token=" + token + "\n"+"app_pkg=" + app_pkg);
//todo 调起方登录操作 做你需要的需求
}
}
//别忘了回收广播 不然会报error,这里是一个内存回收的知识点,第二个有时间博主会补上的知识点
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
}
MainActivity 对应的activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt"
android:text="APP授权登陆"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
A应用注册AndroidManifest.xml清单添加权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
B应用(授权应用)业务代码与布局代码
B(授权应用),SignActivity 页面代码
1,SignActivity打开前,先处理A应用数据,传递给服务器校验是否授权
2,服务器给予授权,则是上面gif看到正常页面,点击按钮授权即可
3,B应用未登录先走登录页面,登录后再进入上面授权页面
4, 按钮授权 核心代码intent1.setAction(“kx.com.kx.b.sign”) ,sendBroadcast(intent1);
public class SignActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBt;
private String mUser_package_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign);
mBt = findViewById(R.id.bt_confirm_login);
mBt.setOnClickListener(this);
mBt.setEnabled(false);
//获取传递的数据
Intent intent = getIntent();
Uri uri = intent.getData();
//获取参数值
String type = uri.getQueryParameter("type");
mUser_package_name = uri.getQueryParameter("user_package_name");
//类型type 检验
if (TextUtils.equals(type, "1")) {
//Todo 未登录 处理
request5037();
}
}
/**
* 外部 app 拉起授权 (code:5037)
* 服务器校验 是否授权
* 授权 页面A状态
*/
private void request5037() {
mBt.setEnabled(true);
}
@Override
public void onClick(View v) {
Intent intent1 = new Intent();
intent1.setAction("kx.com.kx.bapp.sign");
intent1.putExtra("token", "xxxx-xxxx-xxxxx");
intent1.putExtra("app_pkg", "com.kx.aapp");
sendBroadcast(intent1);
finish();
}
}
SignActivity 对应的布局代码activity_sign.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_gravity="center_horizontal"
android:background="@color/color_eeeeee"/>
<ImageView
android:id="@+id/img_head"
android:layout_width="85dp"
android:layout_height="85dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="60dp"
android:background="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="30dp"
android:layout_marginTop="10dp"
android:textSize="18sp"
android:text="B应用"
android:textColor="@color/color_333333"/>
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:background="@color/color_eeeeee"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="15dp"
android:text="登录后应用将获取一下权限"
android:textColor="@color/color_333333"
android:textSize="14sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<ImageView
android:layout_width="7dp"
android:layout_height="7dp"
android:layout_gravity="center_vertical"
android:background="@drawable/shape10_bg_bfbfbf"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="获取的公开信息(昵称、头像等)"
android:textColor="@color/color_bfbfbf"
android:textSize="11sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_success_show"
android:visibility="gone"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="15dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/img_use_head"
android:layout_width="28dp"
android:layout_height="28dp"
/>
<TextView
android:layout_marginLeft="10dp"
android:textSize="14sp"
android:textColor="@color/color_333333"
android:id="@+id/tv_use_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/bt_confirm_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="30dp"
android:padding="6dp"
android:text="@string/comfirm_login"
android:textColor="@color/white"
android:textSize="20sp"/>
</LinearLayout>
B应用在清单文件AndroidManifest.xml 需要配置
<!--授权页面-->
<activity android:name=".SignActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.DELETE"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<data
android:host="com.kx.bapp"
android:path="/sign"
android:scheme="kx"/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
以上就是“短视频APP源码开发,APP间的授权登录”的全部内容,希望对大家有帮助。