An Objective-C wrapper around the 37Signals Campfire API.
Objective-C Ruby
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Campfire
Crackle.xcodeproj
Crackle.xcworkspace
Crackle
CrackleTests
Extensions
Pods
.gitignore
Crackle.podspec
LICENSE
Podfile
Podfile.lock
README.md
contributor_code_of_conduct.md

README.md

Crackle

Crackle is an Objective-C wrapper around the 37signals Campfire API.

Functionality

Crackle covers all major endpoints provided by the Campfire API, with support for multiple accounts.

Account

  • Get info for an authorized account GET /account.xml

      +[CKLCampfireAPI getInfoForAccount:responseBlock:]
    

Message

  • Get recent messages from a room GET /room/#{id}/recent.xml

      +[CKLCampfireAPI getRecentMessagesForRoom:responseBlock:]
      +[CKLCampfireAPI getRecentMessagesForRoom:sinceMesssage:responseBlock:]
      +[CKLCampfireAPI getRecentMessagesForRoom:sinceMessage:withLimit:responseBlock:]
    
  • Get messages from a room sent on a specific date GET /room/#{id}/transcript.xml, GET /room/#{id}/transcript/#{year}/#{month}/#{day}.xml

      +[CKLCampfireAPI getTodaysMessagesForRoom:responseBlock:]
      +[CKLCampfireAPI getMessagesForRoom:fromDate:responseBlock:]
    
  • Search for messages across all rooms GET /search?q=#{term}&format=xml

      +[CKLCampfireAPI getMessagesWithQuery:account:responseBlock:]
    
  • Send a message to a room POST /room/#{id}/speak.xml

      +[CKLCampfireAPI sendMessage:toRoom:responseBlock:]
    
  • Toggle message starred POST /messages/#{message_id}/star.xml, DELETE /messages/#{message_id}/star.xml

      +[CKLCampfireAPI starMessage:responseBlock:]
    
  • Stream messages from a room GET https://streaming.campfirenow.com/room/#{id}/live.json

      +[CKLCampfireAPI streamMessagesInRoom:responseBlock:]
    

Room

All actions are performed from the account authenticated to access the room object.

  • Get visible and active rooms GET /rooms.xml, GET /presence.xml

      +[CKLCampfireAPI getVisibleRoomsForAccount:responseBlock:]
      +[CKLCampfireAPI getActiveRoomsForAccount:responseBlock:]
    
  • Get info (including the list of users) for room GET /room/#{id}.xml

      +[CKLCampfireAPI getInfoForRoom:responseBlock:]
    
  • Update room with a new name and/or topic PUT /room/#{id}.xml

      +[CKLCampfireAPI updateRoom:withName:topic:responseBlock:]
    
  • Join or leave room POST /room/#{id}/join.xml, POST /room/#{id}/leave.xml

      +[CKLCampfireAPI joinRoom:responseBlock:]
      +[CKLCampfireAPI leaveRoom:responseBlock:]
    
  • Lock or unlock room POST /room/#{id}/lock.xml, DELETE /room/#{id}/lock.xml

      +[CKLCampfireAPI lockRoom:responseBlock:]
      +[CKLCampfireAPI unlockRoom:responseBlock:]
    

Upload

  • Upload an image to a room POST /room/#{id}/uploads.xml

      +[CKLCampfireAPI uploadImage:toRoom:responseBlock:]
    
  • Get recent uploads for room GET /room/#{id}/uploads.xml

      +[CKLCampfireAPI getRecentUploadsForRoom:responseBlock:]
    
  • Get upload for specific message GET /room/#{id}/messages/#{upload_message_id}/upload.xml

      +[CKLCampfireAPI getUploadForMessage:responseBlock:]
    

User

  • Get info for current user GET /users/me.xml

      +[CKLCampfireAPI getInfoForUserForCurrentAccount:responseBlock:]
    
  • Get info for specific user GET /users/#{id}.xml

      +[CKLCampfireAPI getInfoForUser:responseBlock:]
    

Authentication

Crackle uses OAuth 2 to authenticate the user with your app. Register your app’s client ID, client secret, and redirect URI with

+[CKLCampfireAPI setClientID:secret:redirectURI:]

Then call

+[CKLCampfireAPI authorizeWithWebView:]

to display the 37signals login form in a UIWebView, followed by a permission screen for allowing your app to access the user’s account. Once authentication is finished, the account’s access token is stored securely in the Keychain.

Login Form Permission Dialog

Examples

// Find a room to join
__block CKLCampfireRoom *room;
[CKLCampfireAPI getVisibleRoomsForAccount:account responseBlock:^(NSArray *array, NSError *error) {
    room = [array firstObject];
    // Join the room
    [CKLCampfireAPI joinRoom:room responseBlock:^(NSError *error) {
        // Stream messages from the room
        __block NSUInteger messageCount = 0;
        [CKLCampfireAPI streamMessagesInRoom:room responseBlock:^(CKLCampfireMessage *message, NSError *error) {
            // Print each message as it comes in
            if (message.body) {
                NSLog(@"%@", message.body);
                messageCount++;
            }

            // After a number of messages come in
            if (messageCount == MESSAGES_TO_STREAM) {
                // Send a message to the room
                CKLCampfireMessage *message = [CKLCampfireMessage postingMessageWithBody:@"Goodbye!" ofType:CKLCampfireMessageTypeText];
                [CKLCampfireAPI sendMessage:message toRoom:room responseBlock:^(CKLCampfireMessage *message, NSError *error) {
                    // Leave the room
                    [CKLCampfireAPI leaveRoom:room responseBlock:^(NSError *error) {
                        
                    }];
                }];
            }
        }];
    }];
}];

Version

0.9.0

License

MIT