第一次寫博客兜粘,目的在于總結一下最近做第三方登錄踩過的坑古话,陳述的觀點不一定都是正確的,但是我想能為遇到類似問題的小伙伴提供一些思路和啟迪刃唐,不足之處還請諒解酪呻!
雖然現(xiàn)在有友盟這樣集成登錄的平臺减宣,但是有的情況下卻不一定適用,而且玩荠,如果原生方式的登錄能夠成功漆腌,那么,集成登錄的方式自然水到渠成阶冈。第三方登錄的開發(fā)一般都需要經歷以下過程:去官網注冊開發(fā)者賬號闷尿,登錄賬號創(chuàng)建應用獲取一些key,將key配置到自己的項目進行開發(fā)女坑。這里的key在各個平臺略有差異填具,但實質都是類似的。下面我們就來一一感受匆骗。
以下為開發(fā)者必備的幾個鏈接:
line開發(fā)者官網
line登錄官方demo
line android sdk
1灌旧、注冊賬號
line有點奇怪,到目前為止我都沒有通過開發(fā)者官網找到注冊賬號的入口绰筛,我是使用line app來進行注冊的。如果使用line app出現(xiàn)網絡問題描融,請使用vpn铝噩。
2、創(chuàng)建應用
有了賬號之后窿克,可以去創(chuàng)建一個Channel骏庸,這個Channel我理解為一個應用。這個過程沒有什么坑年叮,如實填寫就好具被,最終會獲得一個Channel ID,這個在后續(xù)開發(fā)中會用到只损。
接著一姿,需要進入Technical configuration,填寫一些配置信息跃惫。Android需要填寫三項叮叹,包名和簽名必填。
這里出現(xiàn)了我在開發(fā)過程中遇到的最大的坑爆存。由于我在做line登錄之前已經做了微信登錄蛉顽,微信后臺也要需要填寫簽名,微信提供了獲取簽名的app先较,非常方便携冤。于是乎悼粮,這里的簽名我就使用了做微信登錄時獲取到的,然而事實證明曾棕,二者是南轅北轍的扣猫。如果這里的簽名錯了,在其他條件都正常的情況下睁蕾,網頁授權登錄的方式可以成功苞笨,但是調用line app進行授權登錄是一定會失敗的。
這里提供兩種方法獲取SHA1:
第一子眶,使用命令行keytool -list -v -keystore + keystore的路徑瀑凝,eg:
keytool -list -v -keystore "D:\Users\cyq7on.android\debug.keystore"。
第二個方法完全來自于一位網友:
PS:為了避免注冊時弄錯簽名臭杰,建議直接用打包出來的apk查看簽名粤咪,具體如下:
1) 將apk修改后綴為 .rar文件后解壓;
2) 進入解壓后的META-INF目錄渴杆,該目錄下會存在文件CERT.RSA
3) 在該目錄下打開cmd寥枝,輸入命令 :keytool -printcert -file CERT.RSA
這里將會顯示出MD5和SHA1簽名。
可以在評論區(qū)找到這位網友
3磁奖、配置工程囊拜,進行開發(fā)
準備工作終于完成,現(xiàn)在可以進入正式開發(fā)了比搭。
建好工程之后冠跷,將line-android-sdk中的jar包拷進libs文件夾,將.so文件拷進jniLibs文件夾身诺,如果沒有jniLibs文件夾蜜托,可在main目錄下新建一個,工程結構如下:
除此之外霉赡,AndroidManifest里面還需要進行配置:
<!-- LINE SDK Settings -->
<activity
android:name="jp.line.android.sdk.activity.LineAuthCompleteActivity"
android:configChanges="keyboard|orientation"
android:exported="true"
android:screenOrientation="sensor" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="line.Channel ID" />
</intent-filter>
</activity>
<activity
android:name="jp.line.android.sdk.activity.WebLoginActivity"
android:configChanges="keyboard|orientation"
android:exported="false"
android:screenOrientation="sensor" >
</activity>
<meta-data
android:name="jp.line.sdk.ChannelId"
android:value="Channel ID" />
<meta-data
android:name="jp.line.sdk.AuthScheme"
android:value="line.Channel ID" />
Channel ID替換為自己的就可以了橄务。
登錄的核心代碼:
LineAuthManager authManager = LineSdkContextManager.getSdkContext().getAuthManager();
authManager.login(this).addFutureListener(
new LineLoginFutureListener() {
@Override
public void loginComplete(LineLoginFuture future) {
switch (future.getProgress()) {
case SUCCESS:
displayCroutonOnMainThread("Logged in!", Style.INFO);
logger.info("Login success!");
break;
case CANCELED:
displayCroutonOnMainThread("Don't cancel login!", Style.ALERT);
logger.info("Login canceled!");
break;
default:
displayCroutonOnMainThread("An error occurred. Please try again.", Style.ALERT);
logger.info("Login error!");
break;
}
}
});
上述代碼來源于官方demo,這里注意一下displayCroutonOnMainThread方法穴亏,顧名思義蜂挪,我們可以看出,loginComplete方法其實是回調在子線程的嗓化。這里我有一點疑惑锅劝,我故意在子線程里操作了UI,結果程序沒有崩潰蟆湖,希望有大神可以指點一二故爵。
使用authManager.login方法,如果手機安裝了line app則會調用app進行授權登錄,反之則使用網頁授權登錄诬垂。而另一個方法劲室,loginByAccount則無論手機是否安裝line app,都會使用網頁授權登錄的方式结窘。此外很洋,要登出也有一個方法,authManager.logout()隧枫。
如果登錄出現(xiàn)錯誤喉磁,可以使用如下代碼獲取錯誤信息:
public void loginComplete(LineLoginFuture future) {
logger.info("Login error! " + future.getCause().getMessage());
}
如果你能成功登錄自己的賬號,換一個其他賬號卻失敗官脓,那么最有可能是配置問題协怒。解決方法有二:
第一,在Channel的Basic information中將應用的狀態(tài)由DEVELOPING改為PUBLISHED卑笨;
第二孕暇,在Channel的Roles中添加需要測試的用戶。
line登錄踩過的坑大致就是這些了赤兴,有問題歡迎指教和探討妖滔!