在實作 LINE Login 時,送出要切換 channel 從 developing 為 published 的申請,LINE 官方回email說需要在畫面上看到 LINE Loing 的 button, 由於是把 line login 放在 perferencefragment裡,但是很久很久以前在實作 PreferenceFragment 時, 發現沒有 button 可以用, 無法做設定參數以外的事情,很久以前的解法是要分成2個 xml 檔案,或同一個xml 放2個 layout,解決完的畫面如下:
在研究了一下 seafile 的作法,他也沒有解決這個問題,可能是沒有這個需求,seafile 的作法在是 layout/preference_list_fragment.xml 裡放多個 layout, listview 的部份留給 preference fragment 使用。
我發現,照著 solar/IconPreference.java 使用的範例,可以做出 button preference 也可以在程式碼裡動態地修改 button 裡的文字。解決完的畫面如下:
只是,比較特別的是 Fragment 裡的 ListView 用來顯示 Preference, Preference 被建立後 protected void onBindView(View view) 的時間點在 Fragment onCreate() 或 Fragment 的 onCreateView 之後,所以無法直接塞 onClick 事件給自定設定的 ButtonPreference 來使用,解法是把要做的事件先放到 新建立的ButtonPreference 裡,等 ButtonPreference 在 onBindView 後,並存取到 button 時,再用 setOnClickListener() 來執行該方法。
從畫面可以看到,原本有button 的應該長的像他上面那行,用Facebook 登入,是用文字。會想挑戰這個解法是因為 LINE Developer 回信給我,說「LINE Login」 的按鈕,規格不符。於是我就從網頁版下載了圖片+文字來用,但很怪,LINE 他們只提供了”Log In” 的多國語言字串,卻沒提供 Log Out 的。
整組程式都寫好,最後要送出申請為「已發佈」(Published) 被 LINE 的人打搶,被打搶的Email:
Facebook login 和 LINE Login 相比:
- Facebook在設定開發者的憑證(Android Package Signature) 上面比LINE 方便,可以同時設定 developing /released 的碼.
- Facebook 使用者多。
- Facebook 允許developer 拿到 user 公開的 id, photo 和 email, LINE 不能拿到公開 LINE ID。
- Facebook 的 status 從 developing 切換到 published 不需要「先」通過人工審核,切換一下很快,所有的人都可以存取我們的App,並立即取得facebook 帳號的授權。
- 比較特別的是當使用我們facebook App 的人多了,facebook 會寄通知信來,要求在 facebook 的設定裡增加隱私權的宣告,那也很簡單,網路上有很多產生獸,點一點就完成了。
相關網址:
- https://developers.line.me/line-login/overview
- https://developers.line.me/web-login/setting-up-login-button
- https://developers.line.me/channel-console/publish-app
Every Channel has a status. To publish your application, you must change the status of your Channel to PUBLISHED. - [Android]實作Facebook login
http://max-everyday.com/2016/09/android-facebook-login/ - 關於LineBot(7) – 使用Line Login實現oAuth SSO(單一登入)
http://studyhost.blogspot.tw/2016/12/linebot7-line-loginoauth-sso.html