1. 集成Line登陆
1. project build.gradle
buildscript {
......
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
......
}
}
allprojects {
repositories {
jcenter()
......
}
}
复制代码
2. module build.gradle
android {
defaultConfig {
......
minSdkVersion 17
......
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
......
}
dependencies {
......
implementation 'com.linecorp:linesdk:5.0.1'
}
复制代码
3. LoginActivity.class
集成登陆功能
- 先验证token是否有效,token有效则能够使用
LineApiClient
获取token和userId;token无效须要跳转到Line app登陆(若是没安装Line app则打开浏览器进行网页受权)
- token有效状态下,用户信息均可以经过LineApiClient获取。
- LineApiClient 的方法由于须要访问网络,因此都须要在子线程调用。
public class LoginActivity extends Activity {
private static final int REQUEST_CODE = 1000;
private static LineApiClient lineApiClient;
public static LineApiClient getLineApiClient(Context context) {
if (lineApiClient == null) {
synchronized (LoginActivity.class) {
if (lineApiClient == null) {
LineApiClientBuilder apiClientBuilder = new LineApiClientBuilder(context, Constants.LINE_CHANNEL_ID);
lineApiClient = apiClientBuilder.build();
}
}
}
return lineApiClient;
}
public void login() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
try {
if (getLineApiClient(LoginActivity.this).verifyToken().isSuccess()) {
String accessToken = getLineApiClient(LoginActivity.this).getCurrentAccessToken().getResponseData().getTokenString();
LineProfile profile = getLineApiClient(LoginActivity.this).getProfile().getResponseData();
String userId = profile.getUserId();
loginSuccess(userId, accessToken);
return;
}
} catch (Exception e) {
e.printStackTrace();
}
try{
LineAuthenticationParams params = new LineAuthenticationParams.Builder().scopes(Arrays.asList(Scope.PROFILE)).build();
Intent loginIntent = LineLoginApi.getLoginIntent(activity, Constants.LINE_CHANNEL_ID, params);
startActivityForResult(loginIntent, REQUEST_CODE);
} catch(Exception e) {
e.printStackTrace();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != REQUEST_CODE) {
return;
}
LineLoginResult result = LineLoginApi.getLoginResultFromIntent(data);
switch (result.getResponseCode()) {
case SUCCESS:
try {
String accessToken = result.getLineCredential().getAccessToken().getTokenString();
String userId = result.getLineProfile().getUserId();
String displayName = result.getLineProfile().getDisplayName();
} catch (Exception e) {
e.printStackTrace();
}
break;
case CANCEL:
break;
default:
}
}
public void logOut() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
try {
getLineApiClient(LoginActivity.this).logout();
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
复制代码
开发中遇到的问题和解决方案都在代码写了注释。