ฉันควรใช้ตัวจัดการบัญชี Android สำหรับอะไร


154

ฉันเห็น AccountManager ใน SDK Android และมันถูกใช้เพื่อจัดเก็บข้อมูลบัญชี ดังนั้นฉันไม่พบการสนทนาทั่วไปเกี่ยวกับสิ่งที่ตั้งใจไว้ มีใครรู้บ้างเกี่ยวกับการสนทนาที่เป็นประโยชน์เกี่ยวกับความตั้งใจที่อยู่เบื้องหลัง AccountManager และสิ่งที่คุณซื้อ ความคิดเห็นใดของบัญชีประเภทนี้เหมาะสำหรับ นี่จะเป็นที่ที่คุณใส่ข้อมูลบัญชีผู้ใช้ของคุณสำหรับบริการเว็บทั่วไปหรือไม่?


หมายเหตุฉันกำหนดเป้าหมาย 2.1 ขึ้นไปเพื่อให้สามารถใช้ AccountManager ถ้ามันเป็นทางเลือกที่เหมาะสม
ฟิล

7
มีส่วนที่เกี่ยวกับคำถามนี้ในโพสต์นี้: udinic.wordpress.com/2013/04/24/…
Udinic

@Udinic - ขอบคุณ ความช่วยเหลือมากมาย!
Chad Bingham

หัวข้อนี้จะจัดการกับในเว็บไซต์นี้: www.digigene.com/android/accounts-in-android/
Ali Nem

นอกจากนี้ยังมีห้องสมุดสำหรับการจัดการบัญชีในหุ่นยนต์ที่นี่
Ali Nem

คำตอบ:


94

คำถามนี้ค่อนข้างเก่า แต่ฉันคิดว่ามันยังเป็นประโยชน์

AccountManager, SyncAdapterและContentProviderไปด้วยกัน

แต่คุณทำได้:

ด้วยAccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager ช่วยให้ผู้ใช้เป็นจุดศูนย์กลาง (การตั้งค่า> บัญชี) เพื่อกำหนดข้อมูลประจำตัวของพวกเขา
  • Android SyncAdapterเมื่อตัดสินใจประสานสามารถทำได้ผ่านทาง สามารถใช้แบตเตอรี่ได้อย่างมีประสิทธิภาพ (เช่นไม่มีการซิงค์เมื่อเครือข่ายล่ม)
  • ContentProviderเป็นวิธีที่สะดวกในการใช้ข้อมูลร่วมกันในการใช้งานหมายเหตุ: มีวิธีการอื่น ๆ ของการสื่อสารระหว่างกระบวนการบน Android
  • ContentProviderตารางการเข้าถึงฐานข้อมูลในพื้นหลังด้ายAsyncQueryHanlderช่วยในการสอบถามContentProviderในหัวข้อพื้นหลังเพื่อป้องกันไม่ให้แอพลิเคชันไม่ตอบสนอง (ANR) ข้อผิดพลาดในขณะที่ไม่ต้องให้คุณจัดการกับเกลียวอย่างชัดเจน
  • ContentProviderเชื่อมโยงกับContentResolverผู้สังเกตการณ์: หมายความว่าง่ายต่อการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงเนื้อหา

Bottom line : กรอบงานAccountManager/ SyncAdapter/ ContentProviderช่วยถ้าคุณต้องการซิงโครไนซ์ข้อมูลจากแหล่งข้อมูลบนเว็บ การใช้งานปลอม / ดัมเบิลนั้นจำเป็นสำหรับ API 7 ด้วย

  • หากคุณต้องการจัดเก็บข้อมูลคุณควรพิจารณากลไกที่ง่ายกว่าสำหรับการจัดเก็บข้อมูล
  • หากคุณต้องการดึงทรัพยากรเพียงอย่างเดียวคุณสามารถใช้ AsyncTaskLoader
  • หากคุณต้องการโหลดภาพแบบอะซิงโครนัสคุณสามารถใช้ไลบรารีพิเศษเช่นSquare Picasso
  • หากคุณต้องการรันโค้ดบางอย่างในเวลาที่กำหนดคุณสามารถพิจารณาบริการ / การเตือนภัยได้
  • ใช้ได้เฉพาะจาก API> = 7 (สิ่งนี้ไม่สำคัญอีกต่อไป)

ในที่สุดหากคุณใช้ a SyncAdapterให้พิจารณาFirebase Cloud Messaging (ก่อนหน้านี้ Google Cloud Messaging) อย่างจริงจังหรือที่รู้จักว่า "การแจ้งเตือนแบบพุช" เพื่อรับการอัปเดตที่สดใหม่และการใช้แบตเตอรี่ที่เหมาะสมที่สุด


1
ในตัวอย่าง SDK AccountAuthentificatorActivityเป็นเพียงส่วนเสริมเท่านั้น
rds

ฉันยังไม่คุ้นเคยกับคลาสเหล่านี้ แต่เป็นไปได้หรือไม่ที่คลาสเหล่านี้จะเพิ่มบัญชีที่มีการเรียกใช้ฟังก์ชันโดยไม่ต้องมีการโต้ตอบกับผู้ใช้ เช่นเพิ่มบัญชีแลกเปลี่ยน Microsoft บัญชี Google บัญชี POP3 / IMAP ขอบคุณ
dackyD


ขอบคุณ @rds แต่จากคำอธิบายของคุณดูเหมือนว่ารหัสตัวอย่างไม่เพียงพอ ดูเหมือนว่าฉันต้องใช้ SyncAdapter และ ContentProvider เช่นกันเพื่อให้บรรลุเป้าหมายของฉัน ถูกต้องฉันถ้าฉัน :) ผิด
dackyD

ถูกต้องอย่างแน่นอน มันเป็นความหมายของวรรคแรกของพวกเขาพวกเขาไปด้วยกันและมันเป็นไปไม่ได้ที่จะใช้หนึ่งโดยไม่ต้อง
rds

23

คลาส AccountManager ถูกรวมเข้ากับบัญชีโทรศัพท์ของคุณ ดังนั้นหากคุณปฏิบัติตามคำแนะนำทั้งหมดและทำให้การทำงานเป็นปกติคุณจะเห็นบัญชีของคุณภายใต้เมนู "การตั้งค่า -> บัญชีและการซิงค์" จากตรงนั้นคุณสามารถปรับแต่งมันหรือลบได้ นอกจากนี้ accountManager ยังมีแคชของตั๋วการรับรองความถูกต้องสำหรับบัญชีของคุณ สามารถใช้สิ่งนี้ได้เช่นกันหากคุณไม่ได้วางแผนซิงโครไนซ์บัญชีของคุณ (เท่าที่ฉันรู้)

หากคุณไม่ต้องการให้บัญชีของคุณปรากฏใต้เมนูนั้นคุณไม่ควรใช้ AccountManager และเก็บข้อมูลบัญชีไว้ที่อื่น (อาจอยู่ในการตั้งค่าที่แชร์) http://developer.android.com/guide/topics/data/data -storage.html


14

จากhttp://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

ปริศนาชิ้นแรกเรียกว่า Account Authenticator ซึ่งเป็นตัวกำหนดว่าบัญชีของผู้ใช้จะปรากฏในการตั้งค่า“ Accounts & Sync” อย่างไร การใช้งานตัวตรวจสอบบัญชีต้องมี 3 ชิ้น: บริการที่ส่งคืนคลาสย่อยของ AbstractAccountAuthenticator จากวิธี onBind กิจกรรมเพื่อให้ผู้ใช้ป้อนข้อมูลประจำตัวของพวกเขาและไฟล์ xml ที่อธิบายว่าบัญชีของคุณควรแสดงอย่างไรเมื่อแสดงต่อผู้ใช้ คุณจะต้องเพิ่มการอนุญาต android.permission.AUTHENTICATE_ACCOUNTS ลงใน AndroidManifest.xml ของคุณ


3
เป็นบทความที่ดี แต่คุณคิดว่า AccountManager มีไว้สำหรับบัญชีที่ซิงค์รายชื่อติดต่อและอีเมลเท่านั้นหรือเรา / สามารถ / ควรใช้กับทุกอย่างที่มี ID ผู้ใช้และรหัสผ่านหรือไม่
ฟิล

@Phil: ฉันไม่เคยใช้ AccountManager ดังนั้นฉันไม่สามารถบอกคุณได้ จำไว้ว่าสิ่งนี้มาพร้อมกับ 2.0 ดังนั้นหากคุณยินดีที่จะทำงานบนอุปกรณ์ที่มี SDK ต่ำกว่าคุณจะต้องหาวิธีอื่นในการจัดการการเข้าสู่ระบบ
Macarse

6
คุณสามารถใช้ตัวจัดการบัญชีสำหรับบัญชีทุกประเภทซิงค์ข้อมูลทุกประเภทที่คุณเก็บไว้ไม่ว่าในทางใด ลองใช้github.com/maxpower47/PinDroidเพื่อดูตัวอย่างการใช้เพื่อซิงค์บุ๊กมาร์กกับฐานข้อมูล sqlite
maxpower47

7

AccountManagerเป็นสิ่งที่ดีด้วยเหตุผลต่อไปนี้:

  • อันดับแรกคือการจัดเก็บชื่อบัญชีหลายบัญชีที่มีระดับการเข้าถึงคุณลักษณะของแอพต่าง ๆ ภายใต้ประเภทบัญชีเดียว ตัวอย่างเช่นในแอพสตรีมวิดีโอหนึ่งอาจมีชื่อบัญชีสองชื่อ: หนึ่งชื่อที่มีการสาธิตการเข้าถึงวิดีโอจำนวน จำกัด และอีกชื่อหนึ่งที่สามารถเข้าถึงวิดีโอทั้งหมดได้แบบเต็มเดือน นี่ไม่ใช่เหตุผลหลักสำหรับการใช้Accountsงานอย่างไรก็ตามเนื่องจากคุณสามารถจัดการได้อย่างง่ายดายในแอปของคุณโดยไม่จำเป็นต้องมีAccountsสิ่งที่ดูแฟนซีนี้….
  • ข้อดีอีกประการของการใช้Accountsคือการกำจัดการอนุญาตแบบดั้งเดิมด้วยชื่อผู้ใช้และรหัสผ่านในแต่ละครั้งที่ผู้ใช้ร้องขอคุณสมบัติที่ได้รับอนุญาตเนื่องจากการตรวจสอบความถูกต้องจะเกิดขึ้นในพื้นหลังและผู้ใช้จะถามรหัสผ่านของพวกเขา ฉันจะไปหาทีหลัง
  • การใช้Accountsคุณสมบัติในแอนดรอยด์ยังขจัดความจำเป็นในการกำหนดประเภทบัญชีของตัวเองอีกด้วย คุณอาจเจอแอพที่ใช้บัญชี Google เพื่อขออนุมัติซึ่งจะช่วยลดความยุ่งยากในการสร้างบัญชีใหม่และจดจำข้อมูลประจำตัวของผู้ใช้
  • Accounts สามารถเพิ่มได้อย่างอิสระผ่านการตั้งค่า→บัญชี
  • Accountsอนุญาตผู้ใช้ข้ามแพลตฟอร์มที่สามารถจัดการได้อย่างง่ายดายโดยใช้ ตัวอย่างเช่นลูกค้าสามารถเข้าถึงเนื้อหาที่ได้รับการป้องกันในเวลาเดียวกันในอุปกรณ์ Android และพีซีโดยไม่จำเป็นต้องลงชื่อเข้าใช้ซ้ำ
  • จากจุดรักษาความปลอดภัยในมุมมองของการใช้รหัสผ่านเดียวกันในทุกคำขอไปยังเซิร์ฟเวอร์ช่วยให้การดักฟังในการเชื่อมต่อที่ไม่ปลอดภัย การเข้ารหัสรหัสผ่านไม่เพียงพอที่นี่เพื่อป้องกันการขโมยรหัสผ่าน
  • ในที่สุดเหตุผลสำคัญสำหรับการใช้Accountsคุณสมบัติใน Android คือการแยกทั้งสองฝ่ายที่เกี่ยวข้องในธุรกิจใด ๆ ที่Accountsเรียกว่า authenticator และเจ้าของทรัพยากรโดยไม่กระทบต่อข้อมูลประจำตัวของลูกค้า (ผู้ใช้) เงื่อนไขอาจดูเหมือนค่อนข้างคลุมเครือ แต่อย่ายอมแพ้จนกว่าคุณจะอ่านย่อหน้าต่อไปนี้…😉

ให้ฉันทำอย่างละเอียดด้วยตัวอย่างของแอพสตรีมวิดีโอ บริษัท A เป็นเจ้าของธุรกิจสตรีมมิ่งวิดีโอโดยทำสัญญากับ บริษัท B เพื่อให้บริการพรีเมี่ยมแก่สมาชิกบางราย บริษัท B ใช้วิธีชื่อผู้ใช้และรหัสผ่านในการจดจำผู้ใช้ สำหรับ บริษัท A ที่จะจดจำสมาชิกพรีเมี่ยมของ B วิธีหนึ่งคือการรับรายชื่อจาก B และใช้กลไกการจับคู่ชื่อผู้ใช้ / รหัสผ่านที่คล้ายกัน วิธีนี้ผู้ตรวจสอบสิทธิ์และเจ้าของทรัพยากรเหมือนกัน (บริษัท A) นอกเหนือจากข้อผูกพันของผู้ใช้ในการจำรหัสผ่านที่สองเป็นไปได้มากว่าพวกเขาจะตั้งรหัสผ่านเดียวกันกับโปรไฟล์ของ บริษัท B ของพวกเขาสำหรับการใช้บริการจาก A ซึ่งไม่ชัดเจน

เพื่อบรรเทาข้อบกพร่องข้างต้น OAuth ได้รับการแนะนำให้รู้จัก ในฐานะที่เป็นมาตรฐานแบบเปิดสำหรับการให้สิทธิ์ในตัวอย่างข้างต้น OAuth เรียกร้องให้ บริษัท B (การรับรองความถูกต้อง) ทำการอนุญาตโดยการออกโทเค็นบางตัวที่เรียกว่าโทเค็นการเข้าใช้สำหรับผู้ใช้ที่มีสิทธิ์ (บุคคลที่สาม) โทเค็น โทเค็นไม่ได้หมายความว่าไม่มีสิทธิ์

ฉันได้อธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้และAccountManagerในเว็บไซต์ของฉันที่นี่

นี่เป็นแอพที่ใช้งานง่ายโดยใช้ AccountManager

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.