由于項目中需要使用LINE進行一鍵登錄,所以記錄下步驟,其實小伙伴直接看官網也可以,介紹的蠻詳細的,先看下效果圖吧。
將庫導入項目
在模塊級build.gradle文件中添加LINE SDK依賴項。
repositories {
...
jcenter()
}
dependencies {
...
implementation 'com.linecorp:linesdk:5.0.1'
...
}
添加Android編譯選項
啟用Java 1.8支持。在與build.gradle上述相同的文件中,添加:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}
設置Android清單文件
要指定您的應用程序需要Internet訪問,請INTERNET向您的AndroidManifest.xml文件添加權限。
<uses-permission android:name="android.permission.INTERNET" />
注意:
確保進行登錄調用的活動的啟動模式未設置為,singleInstance因為這可能會阻止活動接收onActivityResult回調。
將您的應用鏈接到您的頻道
將您的應用程序鏈接到LINE登錄頻道,在LINE Developers Console
https://developers.line.biz/console/上您的頻道設置的LINE Login選項卡上啟用移動應用程序,然后填寫這些字段。
- 軟件包名稱:必填。應用程序的軟件包名稱,用于啟動Google Play商店。
- 軟件包簽名:可選。您可以通過在新行中輸入每個簽名來設置多個簽名。
-
Android URL方案:可選。用于啟動您的應用程序的自定義URL方案。
微信截圖_20201112175601.png
注意:SHAI是可以填寫多個的,進行換行就可以了。
官網中提供了LINE SDK內置的登錄按鈕,但大部分開發中,我們都是有自己的一套UI,所以我就只介紹自定義登錄按鈕的流程了。
開始登錄活動
當用戶點擊登錄按鈕時,您的應用程序會調用getLoginIntent()以獲取登錄意圖并啟動登錄活動。上下文和通道ID必須傳遞到此方法中。如果設備上安裝了LINE,則會打開LINE進行登錄,而無需詢問用戶的LINE憑據。如果未安裝LINE,則將用戶重定向到瀏覽器中的LINE登錄屏幕,以輸入其LINE憑據(電子郵件地址和密碼)。
1.設置單擊監聽器,以在單擊按鈕時進行監聽。
2.在onClick回調中,調用中的getLoginIntent()方法LineLoginApi以獲取登錄意圖以啟動登錄活動。
3.通過調用startActivityForResult()并傳遞登錄意圖和請求代碼作為參數來啟動身份驗證過程。請求代碼是用于標識請求的整數。
以下是一個示例,說明當用戶點擊登錄按鈕時如何啟動活動以登錄用戶。
private static final int REQUEST_CODE = 1;
...
final TextView loginButton = (TextView) findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try{
// App-to-app login
Intent loginIntent = LineLoginApi.getLoginIntent(
view.getContext(),
Constants.CHANNEL_ID,
new LineAuthenticationParams.Builder()
.scopes(Arrays.asList(Scope.PROFILE))
// .nonce("<a randomly-generated string>") // nonce can be used to improve security
.build());
startActivityForResult(loginIntent, REQUEST_CODE);
}
catch(Exception e) {
Log.e("ERROR", e.toString());
}
}
});
注意:
如果您不想使用應用程序對應用程序登錄,而是讓用戶通過瀏覽器中的“ LINE登錄”屏幕登錄,請使用該getLoginIntentWithoutLineAppAuth()方法。
處理登錄結果
用戶登錄后,登錄結果將以活動的onActivityResult()
方法返回。您的應用程序必須重寫此方法以處理登錄結果。
使用對象的getResponseCode()
方法LineLoginResult
確定登錄是否成功。如果getResponseCode()
返回SUCCESS
,則登錄成功。任何其他值表示失敗。請參閱處理錯誤以確定發生的錯誤的類型。
以下示例顯示了您的應用如何處理登錄結果的示例。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode != REQUEST_CODE) {
Log.e("ERROR", "Unsupported Request");
return;
}
LineLoginResult result = LineLoginApi.getLoginResultFromIntent(data);
switch (result.getResponseCode()) {
case SUCCESS:
// Login successful
String accessToken = result.getLineCredential().getAccessToken().getTokenString();
Intent transitionIntent = new Intent(this, PostLoginActivity.class);
transitionIntent.putExtra("line_profile", result.getLineProfile());
transitionIntent.putExtra("line_credential", result.getLineCredential());
startActivity(transitionIntent);
break;
case CANCEL:
// Login canceled by user
Log.e("ERROR", "LINE Login Canceled by user.");
break;
default:
// Login canceled due to other error
Log.e("ERROR", "Login FAILED!");
Log.e("ERROR", result.getErrorData().toString());
}
}
獲取訪問令牌
登錄結果包含一個LineCredential()
對象,該對象包含用戶的訪問令牌。如上面的示例所示,您可以使用以下代碼檢索訪問令牌。
String accessToken = result.getLineCredential().getAccessToken().getTokenString();
登錄后立即獲取用戶資料
LINE SDK在登錄時自動獲取用戶的配置文件信息。用戶的配置文件信息由顯示名稱,用戶ID,狀態消息和配置文件媒體URL組成。通過調用對象中的getLineProfile()
方法來訪問此信息LineLoginResult
。上面示例中的以下代碼片段演示了如何從登錄結果中獲取用戶的個人資料信息并將其傳遞給意圖。
transitionIntent.putExtra("display_name", result.getLineProfile().getDisplayName());
transitionIntent.putExtra("status_message", result.getLineProfile().getStatusMessage());
transitionIntent.putExtra("user_id", result.getLineProfile().getUserId());
transitionIntent.putExtra("picture_url", result.getLineProfile().getPictureUrl().toString());
用戶ID僅對于單個提供者是唯一的。相同的LINE用戶對于不同的提供者將具有不同的用戶ID。避免使用用戶ID來識別不同提供商之間的用戶。