Inlägg taggade ‘Google’

Så får du Google Sync att fungera med din iPhone

För några månader sedan flyttade vi över epost, kalendrar, kontakter och en hel del annat till Google Apps. Det kan jag verkligen rekommendera, men det är inte det vi ska prata om idag. För några dagar sedan fick Athega äntligen leveransen av alla iPhone 3GS-telefoner. Detta aktualiserade hur vi skulle få just epost, kalendrar och kontakter att synkroniseras mellan mobil, dator och Google.

Visst, man kan hävda att Googles iPhone-anpassade Safari-applikationer är bra nog och ibland bättre, men den här guiden visar hur du får epost, kalendrar och kontakter till de nativa motsvarigheterna i din iPhone.

Viktigt att tänka på innan du börjar är att Google endast tillåter ett konto av detta slag (jag har exempelvis lagt till min privata gmail via vanlig IMAP).

Aktivera Google Sync för Google Apps

För att synkroniseringen ska fungera fullt ut behöver du eller din Google Apps-administratör aktivera Google Sync. Detta görs genom att kryssa för ”Aktivera Google Sync” under ”Inställningar för mobilen” när du befinner dig på Tjänstinställningar för Google Apps som administratör.
Inställningar för mobilen

Välj kalendrar

Om du inte aktivt väljer vilka kalendrar du vill synkronisera, kommer du bara få din standardkalender. Detta kanske räcker för en del, men jag har flera olika kalendrar som jag vill få synkroniserade. Att få detta att fungera var inte helt problemfritt. Google kommer säkert förbättra detta, men när detta skrivs behöver du göra enligt nedan.

Svenska stöds inte

Svenska stöds inte

Nu visas Sync-ikonen

Nu visas Sync-ikonen

Din iPhone

Din iPhone

Se till att du är inloggad med ditt Google Apps-konto och att m.google.com är konfigurerad till din domän. Tyvärr såg jag ingen Sync-ikon, efter detta. Det visade sig att jag var tvungen att ändra språk långst ner på sidan. Efter jag ändrat till ”English (US)” och även land till ”USA”, visades ikonen som den skulle.

Nästa steg är att välja din iPhone och sedan vilka kalendrar du vill synkronisera.

Välj kalendrar

Välj kalendrar

Sätt upp ett Exchange-konto

Detta gör du genom att välja Inställningar -> E-post, kontakter, kalendrar -> Lägg till konto… De inställningar du behöver hittar du här.

Sätt upp ett Exchange-konto

Om du har befintliga kalendrar får du välja om du vill ersätta dem. I mitt fall ville jag det eftersom de kalendrar som redan fanns i min iPhone var samma Google-kalendrar, synkroniserade via iTunes.

Radera eller spara befintliga kalendrar?

Radera eller spara befintliga kalendrar?

Så var det klart, alltid samma data i din iPhone som på Google Apps och med Push!

Fördjupning

Mer information hittar du hos Google:

Sinatra och Google Spreadsheet

Efter att ha sett scriptet follow_iphone_devs.rb fick jag idén att kombinera Sinatra och google-spreadsheet-ruby som ett exempel på vad man kan göra i Ruby om man inte har behov av ett större ramverk som Ruby on Rails.

Sinatra
Sinatra är ett DSL för att snabbt och enkelt skapa webbapplikationer i Ruby:

# myapp.rb
require 'rubygems'
require 'sinatra'
get '/' do
  'Hello world!'
end

Komma igång

Först av allt behöver vi Ruby och RubyGems. Eftersom jag använder OS X så är de redan installerade. (Men se till att du har en uppdaterad version av RubyGems)

Om du inte redan har lagt till GitHub i listan över dina gem sources:

gem sources -a http://gems.github.com

Nu är vi redo att installera de gems vi kommer att använda:

sudo gem install sinatra gimite-google-spreadsheet-ruby haml

Nu är vi redo att börja skriva vårt script:

sinatra-and-google-spreadsheet.rb

Först tar vi och laddar in de gems vi kommer använda (Sinatra kommer att ladda in Haml åt oss):

require 'rubygems'
require 'sinatra'
require 'google_spreadsheet'

Nu tar vi och aktiverar sessioner:

# We want to save the posts in a session variable
set :sessions, true

OBS: Detta är självklart ingen lösning som skalar men det fungerar bra för vårt syfte.

Metoderna för att hämta datat från Google Spreadsheet:

def get_posts
  # Retrieve and return the posts
  session["posts"] ||= retrieve_posts
end
 
def retrieve_posts
  # Empty posts hash
  posts = {}
 
  # Log in to Google Spreadsheet
  session = GoogleSpreadsheet.login('xxxxxxxx', 'xxxxxxxx')
 
  # First worksheet of 
  #  http://spreadsheets.google.com/ccc?key=peGTxx6h1WT0ihw9-QETbQg
  ws = session.spreadsheet_by_key("peGTxx6h1WT0ihw9-QETbQg").worksheets[0]
 
  # Iterate over all the rows in the spreadsheet
  for i in 1...ws.num_rows
    # Store the data Identify data using the slug
    posts[ws[i+1,5]] = {
      :title    => ws[i+1,1],
      :content  => ws[i+1,2],
      :date     => Date.parse(ws[i+1,3]),
      :author   => ws[i+1,4],
    }
  end
 
  # Return the retrieved posts
  posts
end

Vi använder memoization för att det bara ska bli en förfrågning till Google per session

Startsida listar helt enkelt alla poster:

get '/' do
  # Get all the posts
  @posts = get_posts
 
  # Render the index template
  haml :index
end

Respektive post har en ”slug” som används i urlen:

get '/:slug' do
  # Get the post
  @post = get_posts[params[:slug]]
 
  # Render the post template
  haml :post
end

Nu definierar vi de Haml-mallar vi använder på sidorna:

__END__
 
@@ layout
%html
  %head
    %title Sinatra and Google Spreadsheet
  %body
    = yield
 
@@ index
%h1.title All posts
 
- @posts.each do |slug, post|
  %ul
    %li
      %a{:href => slug}
        = post[:title]
@@ post
%h1.title
  = @post[:title]
 
%div
  Published
  %span.date
    = @post[:date]
  by
  %span.author
    = @post[:author]
 
%p.content
  = @post[:content]
 
%a{:href => '/'} << Back

Starta scriptet

$ ruby sinatra-and-google-spreadsheet.rb 
== Sinatra/0.9.1 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.0.0 codename That´s What She Said)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

Om allt går som det ska så ska vi nu ha en server på http://localhost:4567/.

Resultat

Från ett kalkylblad på Google Spreadsheet:

Data från Google Spreadsheet

Data från Google Spreadsheet

Till en sida serverad med Sinatra:

Post om Ruby

Resultatet

Att man kan åstadkomma så mycket med under 100 rader Rubykod är rätt imponerande, speciellt om man tänker på att vi då även räknar in kommentarer och mallar.