[Android] 實作LINE Login,增加按鈕到PreferenceFragment

Posted in :

在實作 LINE Login 時,送出要切換 channel 從 developing 為 published 的申請,LINE 官方回email說需要在畫面上看到 LINE Loing 的 button, 由於是把 line login 放在  perferencefragment裡,但是很久很久以前在實作 PreferenceFragment 時, 發現沒有 button 可以用, 無法做設定參數以外的事情,很久以前的解法是要分成2個 xml 檔案,或同一個xml 放2個 layout,解決完的畫面如下:

Screenshot_2014-10-15-19-30-41

在研究了一下 seafile 的作法,他也沒有解決這個問題,可能是沒有這個需求,seafile 的作法在是 layout/preference_list_fragment.xml 裡放多個 layout, listview 的部份留給 preference fragment 使用。


我發現,照著 solar/IconPreference.java 使用的範例,可以做出 button preference 也可以在程式碼裡動態地修改 button 裡的文字。解決完的畫面如下:

Screenshot_2016-08-03-03-37-03_com.miui.home

只是,比較特別的是 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:

Request was reject by our review criteria.

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 的設定裡增加隱私權的宣告,那也很簡單,網路上有很多產生獸,點一點就完成了。

相關網址:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *