The most effective techniques from the agile development methods consider colocation of teams and team members as the ideal situation. However in reality this ideal is seldom reached, people are scattered all over buildings and continents. It may not be a surprise that the biggest risk associated with geographical separation is poor communication.
You can do several things to reduce this risk, independent of which method you end up using.
Try to subdivide your system in components or subsystems with defined dependencies. Assign every individual component to colocated teams of developers. This reduces the technical dependencies of the teams.
For the times that people have to communicate, Alistair Cockburn has a famous diagram that shows the different methods of communication. You can find a version of it here.
Think about daily conference calls, video conferencing, instant messaging, email and Web-based discussion groups. In case it is needed, it may also be wise to put someone on a plane to have a face to face discussion with another team.
When working together, I also recommend using a Web-based document repository, so everyone is working and looking at the same versions of documents (Google has one for free associated with every account.)
You have the right idea about early testing, continuous building, version control and code checking. Of course, everyone should be able to access the same versions and information, so also in this area a shared repository is needed.
And finally, when assigning your tasks across the teams, let the location of the users be associated with which team gets that part of the system assigned. In other words, make sure the users that provide the input are colocated with the team that handles that part of the software. This is important, as in this way you make the most use of an agile method.More information: