GROUPcentric

You have the app.

We increase the user retention.

    About us

    FAQ

    Branding and Press Kit

    Core Concepts

    Android

    iPhone

    Demo Apps

    Our Blog

    Featured Apps

    Pricing

The best way to get users talking about your apps' content.

Private sharing doesn’t happen on large social media sites.

Our drop in SDK lets users talk about your content naturally with their close friend groups.

More likely to share.

73% of consumers would be more likely to share if they knew their comments remained private and just for friends. More shares mean more use, retention, and action.

We allow them to do that in your app. Try it out.

Simple SDK, Rich Analytics.

Measure SDK calls, users, groups, and the amount of content being share from your application between friend groups.

Sign up to setup your free account.

Who is GROUPcentric?

Our Vision

Mobile apps are very siloed and this limits sharing to what we like to refer to as “Sharing 1.0” mechanisms. There are millions of apps across the mobile platforms that have terrific, rich content, and no way to share it outside of large scale Facebook and Twitter blasts or email and SMS; even with these options users must leave their app to share and carry on the conversation, a solution that is neither optimal for the user or the developer. We created Groupcentric as the first Sharing 2.0 mechanism, a new layer in the app stack that allows users to privately share content with groups of their friends that can be accessed on any app. With the vision of connected apps, sharing and communicating with universal and persistent groups across apps, we created Groupcentric for both Android and iOS, the first simple and robust private group chat SDK and platform, allowing developers to add private sharing and group chat into their apps in minutes.

How we got here

GROUPcentric is proudly built by the Shizzlr team. Shizzlr is a group of five Connecticut based guys that love to work around the clock, and strive to build things that help friends privately share content and communicate with one another.

Shizzlr was founded by Nick Jaensch and Keith Bessette in the Summer of 2010, after both refused to work at an insurance company and loved the idea they can change how friends communicate.

As the team was built, and original product evolved; one Sunday night team meeting in early spring 2012 caused the pivot to what is now GROUPcentric. The clarity came in realizing that there are tons of other apps and websites out there where people are already going to discover and share awesome content. And, rather than expecting someone to come to our platform to do both, why not bring our sharing value to the content. This shift led to producing our SDK which keeps someone’s original content, friends sharing, and friend’s conversations as close together as possible.

We pride ourselves on creating software that is simple, robust and beautiful – and look forward to doing it at long as we possibly can.

The people behind the scenes

Nick Jaensch
"Yench" - Cofounder and Reconnaissance Expert
If I'm not working I am: Sully soccer camp, yoga, Fifa, Delaney's
Favorite Pandora station: Chromeo
Favorite subreddit: /r/photoshopbattles
Best television series of all time: Breaking Bad
Keith Bessette
"kb" - Cofounder and Safe Cracker
If I'm not working I am: Surfing
Favorite Pandora station: Reggae
Favorite subreddit: /r/programming
Best television series of all time: A-Team
Keith Woodward
"woodward" - Getaway Driver
If I'm not working I am: Golfing. Poorly.
Favorite Pandora station: Gorillaz
Favorite subreddit: /r/shittyaskscience/
Best television series of all time: The Wire
Tom Bachant
"TBubbles" - Shifty Mechanic
If I'm not working I am: Making sweet, sweet music
Favorite Pandora station: Miike Snow radio
Favorite subreddit: /r/science
Best television series of all time: Bill Nye
Brian La Chat
"Mighty B , B-Man , Dude, Dudester, Bro, Brotherman" - The Peacemaker
If I'm not working I am: Lurking in the shadows fighting crime… Or gaming..
Favorite Pandora station: Milli Vanilli
Favorite subreddit: /r/LearnUselessTalents/
Best television series of all time: Walking Dead

Frequently asked Questions

When will the Groupcentric app and SDK be available?

We are working our tails off to have the SDK ready as soon as possible, and the apps should be done just before then. Look for them to be done by December 2012.

Your apps and SDK are cross platform, what does that even mean?

In the simplest definition, we have apps on both the Android and iOS platforms, along with our website, however we are even more 'cross-platform' than that. Our SDK will hopefully be in use by a number of different apps, and thus users may be spread out not only across platform, but also across apps. A user chatting on our base app may start a group and invite someone to a group that has your app, they will be able to chat, and any content shared between them will be viewed as normal. Expect more information on this topic.

Who can I email if I have a question, comment or just want to vent about my relationship?

Please feel free to email us anything you have to say at support@groupcentric.com

Where did I leave my keys?

Jeez, I have no idea, did you check the last pockets you wore?

Branding

SDK Branding Requirements

Please refer to the Terms of Use for more details regarding branding, but the basics for developers are as follows:

1. The "Get Started" page the user sees when entering the group chat in the app must remain unchanged. This page has information that is critical for the user to see. Please email us if you have any questions. support@groupcentric.com

2. The user profile button must be enabled within the footer of the group chat section of the app.

3. The user profile may not be altered.

Press Kit

Our press kit contains a collection of screenshots from apps with our SDK enabled, along with various logos and icons.

Download

21.6 Mb

Logos

Logo with dark grey text

Logo with white text

Our iOS and Android app icon

Logo sans text

Important Documents

Privacy Statement

INTRODUCTION

Shizzlr Inc. (“Shizzlr” or “Groupcentric”) is the provider of services called Groupcentric (collectively, the “Service”), accessible at http://groupcentric.com. Groupcentric seeks to respect your privacy. This policy describes the information we collect during your use of the Service, how we use it, and how it may be shared.

INFORMATION COLLECTED

Personal information you provide to us

Groupcentric requires several pieces of personal information in order to operate as designed. Name and active phone number are required to use the Service. We may, however, request other information such as your e-mail address, or PIN, which may be required for certain features of the Service.

We receive and store any information you enter on our Service or provide to us in any other way.

Information collected automatically

Groupcentric will also collect non-personally identifiable information as part of the service. This will typically include browser type, language preference, IP address, referring site, and the date and time of each visitor request. Groupcentric collects this data to optimize our service to users.

Groupcentric may also use cookies or web beacons to track a user’s interactions with the Service. This information will be used for internal purposes only to optimize the Groupcentric Service.

Groupcentric collects information from its mobile phone users (who have installed the Groupcentric application or connected through a Groupcentric SDK) in a similar manner to optimize the mobile experience. Beyond mobile phone numbers, we collect mobile screen resolution, and device make and manufacturer.

USE AND DISCLOSURE OF COLLECTED INFORMATION

We neither rent nor sell your personal information to anyone. Groupcentric may share your personal information only as described below.

Friends

Your connections or "friends" can see the location, messages sent, content shared, display name, and profile photo. Individuals reading this information may use it or disclose it to other individuals or entities without our control and without your knowledge. We therefore urge you to think carefully about including any specific information you may deem private in messages or other content (location or otherwise) that you create in the Service.

Third Parties/ Agents

We employ other companies and people to perform tasks on our behalf and need to share your information with them to provide products or services to you. Our agents do not have any right to use personal information we share with them beyond what is necessary to assist us, and they provide a comparable level of protection for your personal information.

Advertising

Shizzlr may work with advertising partners to provide users with targeted and useful contextual advertisements. These partners may set cookies which enable them to recognize your computer and compile information about you or others who use your computer. Ad networks often use this information to better target advertisements that they think will be of use to you. Groupcentric’s Privacy Policy solely governs the use of information and cookies set by the Service and not by any third-party advertising partners.

Transfers

Groupcentric may share data internally with its affiliate companies and may disclose certain information in the event that it is merged, acquired, sold, or some of its assets are acquired. If, in Groupcentric’s discretion, your information will be handled in a materially different manner after such a transaction than it was by Groupcentric, you may have the opportunity to opt-out of having your information shared with any acquirer.

Other

Groupcentric may disclose data to respond to valid legal process from competent authorities, meet legal requirements, exercise our legal rights or defend against legal claims, protect Groupcentric’s interests, fight against fraud, and to enforce our policies or to protect anyone's rights, property, or safety.

ACCESS TO PERSONAL INFORMATION

Groupcentric allows you to access the following information about you for the purpose of viewing, and in certain situations, updating that information and ensuring that it is accurate and complete. You can access this information on the Groupcentric applications by visiting the user settings or profile page. This list will change as our Service changes.

  • PIN
  • Phone number
  • Email address
  • Other User profile information (for example, home city, photo)
  • Usage information (for example, photos shared)

ONLINE RESPONSIBILITY

You should remain aware that any information you share online, via text message, or chat messages can be accessed by others. Groupcentric is not responsible for the actions of those who obtain your content in this manner. Groupcentric cannot guarantee and makes no representation about your safety and security and you should be aware that submitting any information and using the Groupcentric Service is done solely at your own risk. Groupcentric is not liable for the posting, distribution or dissemination of personally identifiable information submitted by you or others relating to you. Any content containing any personally identifiable information such as identification documents, financial information, medical records, social security number, driver’s license number, or other sensitive information will be deleted upon request but Groupcentric is not responsible for monitoring content submitted by users to determine whether this information is being stored or transmitted.

JURISDICTION

All information passed through Groupcentric is primarily handled in the United States but may from time to time be handled in any country in which Shizzlr, Inc. or its affiliate companies maintain facilities. By using the Service, you agree that the handling of your personal information and any communication through the Service will be governed by the laws of the United States and any applicable state laws.

OTHER CONCERNS

If you have any questions or concerns regarding privacy using the Service, please send a detailed message to: Support@groupcentric.com . We will do our best to resolve any problems and concerns.

PRIVACY POLICY CHANGES

Groupcentric may change its Privacy Policy from time to time, and in Groupcentric’s sole discretion. Groupcentric encourages visitors to frequently check this page for any changes to its Privacy Policy. Your continued use of this site after any change in this Privacy Policy will constitute your acceptance of such change.

Effective Date: January 22, 2013

By using Groupcentric you are indicating that you have read, understood, and agrees to the updated Privacy Policy.

Terms of Use

PLEASE READ THESE TERMS OF USE CAREFULLY BEFORE USING THE SERVICES OFFERED BY GROUPCENTRIC. THESE TERMS OF USE SET FORTH THE LEGALLY BINDING TERMS AND CONDITIONS FOR YOUR USE OF THE WEBSITES AT GROUPCENTRIC.COM or SHIZZLR.COM (COLLECTIVELY, THE "SITE"), THE SERVICES, FEATURES, CONTENT, APPLICATIONS OR WIDGETS OFFERED BY GROUPCENTRIC (COLLECTIVELY, THE "SERVICE").

INTRODUCTION

Users and Developers of the Groupcentric platform, affiliated applications, or application programming interface (“API” or “SDK”) are required to comply with Groupcentric’s Terms of Use, SDK License Agreement, and SDK Platform Policy which are accessible at http://groupcentric.com.

Below are our important legal terms of use. We appreciate you taking the time to look through and reading it.

ACCEPTANCE OF TERMS

By registering for and/or using any portion of the Service in any manner, including but not limited to visiting Site, you agree to all of the terms and conditions contained herein ("Terms of Use"), which also incorporate Groupcentric’s Privacy Policy, SDK License Agreement, SDK Platform Policy and all other operating rules, policies and procedures that may be published from time to time on the Site, each of which is incorporated herein by reference and each of which may be updated by Groupcentric from time to time without notice to you in accordance with the terms set forth under the "Modification of Terms of Use" section below.

In addition, some portions of the Service may be subject to additional terms and conditions specified by Groupcentric from time to time and your use of such services is subject to any such additional terms and conditions. These Terms of Use apply to all users of the Service, including, without limitation, users who are contributors of content, information, and other materials or services on the Site, individual users of the Service, venues that access the Service, and users that have a page on the Site.

PRIVACY POLICY

Check out our Privacy Policy here: http://groupcentric.com/#Privacy

ACCESS

Subject to these Terms of Use, Groupcentric provides the Service, as described more fully on the Site and which are selected by you, solely for your own use, and not for the use or benefit of any third party. Services shall include, but not be limited to, any services Groupcentric performs for you, any applications, SDK’s, API’s, or widgets offered by Groupcentric that you download from the Site or, subject to the terms set forth under the "Third party Sites and Services" section below, from third-party application stores (e.g., iTunes® store, or Google Apps Marketplace) authorized by Groupcentric, as well as the offering of any materials displayed or performed on or through the Services, including, without limitation, Content (as defined below)).

USE OF THE SERVICE, REGISTRATION, AND ELIGIBILITY

You may browse the Site and view Content without registering, but as a condition to using certain aspects of the Service, you are required to register with Groupcentric and represent, warrant and agree that you provide Groupcentric with accurate, truthful, and complete registration information (including, but not limited to your name (“User Name”), e-mail address and a password (“PIN”) that you will use to access the Service) and to keep your registration information accurate and up-to-date. Failure to do so shall constitute a breach of these Terms of Use, which may result in immediate termination of your Groupcentric account.

You agree not to:

  • provide any false personal information to Groupcentric (including a false User Name) or create any account for anyone other than yourself without such person's permission;
  • use a User Name that is the name of another person with the intent to impersonate that person;
  • use a User Name or Groupcentric account that is subject to any rights of a person other than you without appropriate authorization; or
  • use a User Name that is a name that is otherwise offensive, vulgar or obscene on Groupcentric's sole discretion or that is otherwise unlawful.
  • use a User Name that is trademarked or the name of a corporation that is not your own.

Groupcentric reserves the right to cancel or refuse registration of a User Name in its sole discretion. You are solely responsible and liable for activity that occurs on your account and shall be responsible for maintaining the confidentiality of your PIN. You shall never use another user's account without such other user's prior express permission. You shall immediately notify Groupcentric in writing of any unauthorized use of your account, or other account-related security breach of which you are aware.

Any registration, use or access to the Service by anyone under 13 is strictly prohibited and in violation of this Agreement.

You may terminate your Groupcentric Account at any time, for any reason, by emailing Support@Groupcentric.com. Groupcentric may suspend or terminate your Groupcentric account in accordance with the Term and Termination sections, below. Groupcentric shall not be liable for any loss or damage arising from your failure to comply with the terms set forth herein.

We may, without prior notice, change the Service; stop providing the Service or features of the Service, to you or to users generally; or create usage limits for the Service.

CONTENT

All Content, whether publicly posted or privately transmitted, is the sole responsibility of the person who originated such Content. Groupcentric cannot guarantee the authenticity of any Content or data which users may provide about themselves or third parties. You acknowledge that all Content created or accessed by you using the Service is at your own risk and you will be solely responsible and liable for any damage or loss to Groupcentric, yourself or any other party resulting therefrom. For purposes of these Terms of Use, the term "Content" includes, without limitation, any location information, videos, audio clips, chat messages, information, data, text, photographs, software, scripts, graphics, and interactive features generated, provided, or otherwise made accessible by you or Groupcentric on or through the Service. Content added, created, uploaded, submitted, distributed, or posted to the Service by users is collectively referred to as, "User Submissions."

Groupcentric Content

The Service contains Content specifically provided by Groupcentric, its partners and third parties that is protected by copyrights, trademarks, service marks, patents, trade secrets or other proprietary rights and laws, as applicable. You shall abide by and maintain all copyright notices, information, and restrictions contained in any Content accessed through the Service.

User Submissions

Subject to these Terms of Use, Groupcentric grants each user of the Site and/or Service a worldwide, non-exclusive, non-sublicensable and non-transferable license to create, use, modify and reproduce the Content, solely for personal, non-commercial use, except as otherwise expressly agreed between Groupcentric and its commercial customers. Use, reproduction, modification, distribution or storage of any Content for other than personal, non-commercial use is expressly prohibited without prior written permission from Groupcentric, or from the copyright holder identified in such Content's copyright notice, as applicable. You shall not sell, license, rent, or otherwise use or exploit any Content for commercial (whether or not for profit) use or in any way that violates any third party right.

RULES AND CONDUCT

As a condition of use, you promise not to use the Service for any purpose that is not authorized or otherwise prohibited by these Terms of Use. You are responsible for all of your activity in connection with the Service. Additionally, you shall abide by all applicable local, state, national and international laws and regulations and, if you represent a business, any advertising, marketing, privacy, or other self-regulatory code(s) applicable to your industry.

By way of example, and not as a limitation, you shall not (and shall not permit any third party to) either (a) take any action or (b) upload, download, post, submit or otherwise distribute or facilitate distribution of any Content on or through the Service, including without limitation any User Submission, that:

  • infringes any patent, trademark, trade secret, copyright, right of publicity or other right of any other person or entity or violates any law or contractual duty;
  • you know is false, misleading, untruthful or inaccurate;
  • is unlawful, threatening, abusive, harassing, defamatory, libelous, deceptive, fraudulent, invasive of another's privacy, tortious, obscene, vulgar, pornographic, offensive, profane, contains or depicts nudity, contains or depicts sexual activity, promotes bigotry, discrimination or violence, or is otherwise inappropriate as determined by Groupcentric in its sole discretion;
  • constitutes unauthorized or unsolicited advertising, junk or bulk e-mail, or spamming;
  • other than appropriate use of an Add-to Link, involves commercial activities (whether or not for profit) and/or sales without Shizzlr’s prior written consent such as contests, sweepstakes, barter, advertising, network marketing or pyramid schemes;
  • contains software viruses or any other computer codes, files, worms, trojan horses, logic bombs or programs that are designed or intended to disrupt, disable, damage, limit, enhance or interfere with the proper function of any software, hardware, or telecommunications equipment or to damage or obtain unauthorized access to any system, data, password or other information of Groupcentric or any third party;
  • impersonates any person or entity, including any employee or representative of Groupcentric;
  • includes any personally identifiable information of yourself or others including but not limited to identification documents, financial information, medical records, social security numbers or driver’s license numbers
  • breaches the Privacy Policy and/or any of the other policies and rules incorporated herein.

You shall not (directly or indirectly):

  • take any action that imposes or may impose (as determined by Groupcentric in its sole discretion) an unreasonable or disproportionately large load on Groupcentric’s (or its third party providers’) infrastructure;
  • interfere or attempt to interfere with the proper working of the Service or any activities conducted on the Service;
  • bypass any measures Groupcentric may use to prevent or restrict access to the Service (or other accounts, computer systems or networks connected to the Service);
  • run any form of auto-responder or "spam" on the Service;
  • use manual or automated software, devices, or other processes to "crawl" or "spider" any page of the Site;
  • harvest or scrape any Content from the Service;
  • modify, adapt, appropriate, reproduce, distribute, translate, create derivative works or adaptations of, publicly display, republish, repurpose, sell, trade, or in any way exploit the Service or Site Content (other than your User Submissions), except as expressly authorized by Groupcentric;
  • decipher, decompile, disassemble, reverse engineer or otherwise attempt to derive any source code or underlying ideas or algorithms of any part of the Service (including, without limitation, any application or widget), except to the limited extent applicable laws specifically prohibit such restriction;
  • copy, rent, lease, distribute, or otherwise transfer any of the rights that you receive hereunder;
  • otherwise take any action in violation of Groupcentric’s guidelines and policies.

Groupcentric does not guarantee that any Content or User Submissions (as defined above) will be made available on the Site or through the Service. Groupcentric has no obligation to monitor the Site, Service, Content, or User Submissions. Shizzlr reserves the right to (i) remove, suspend, edit or modify any Content in its sole discretion, including without limitation any User Submissions at any time, without notice to you and for any reason (including, but not limited to, upon receipt of claims or allegations from third parties or authorities relating to such Content or if Groupcentric is concerned that you may have violated these Terms of Use), or for no reason at all and (ii) remove, suspend or block any User Submissions from the Service.

Groupcentric also reserves the right to access, read, preserve, and disclose any information as Shizzlr reasonably believes is necessary to (i) satisfy any applicable law, regulation, legal process or governmental request, (ii) enforce these Terms of Use, including investigation of potential violations hereof, (iii) detect, prevent, or otherwise address fraud, security or technical issues, (iv) respond to user support requests, or (v) protect the rights, property or safety of Groupcentric, its users and the public.

Any Content transmitted by groups is not representative of our opinions including our employees. Links may be transmitted in groups, none of which are endorsed by or affiliated with us. Please use your discretion in following these links and utilizing the Service and keep in mind that all use is governed by these Terms of Use.

MESSAGES AND CONSENT

Consent to add group members

Groupcentric makes it easy for you to add members to your groups so that you can exchange messages with each other. YOU REPRESENT AND WARRANT THAT EACH PERSON YOU ADD TO A GROUP HAS EXPRESSLY CONSENTED TO BE ADDED TO THE GROUP AND TO RECEIVE TEXT MESSAGES, EMAIL MESSAGES, APPLICATION MESSAGES, FACEBOOK MESSAGES FROM YOU AND ANYONE ELSE IN THE GROUP.

Consent to receive periodic messages

As part of the Service, Groupcentric sometimes causes administrative messages to be sent to members of the group. For example, upon adding a new member to a group, such new member will receive a welcome message, instructions on how to join the group, and other information. Groupcentric also may inform group members who have not replied that they will automatically be removed from the group if they do not participate. Groupcentric will notify group members when another group member has joined the group. Groupcentric may send other administrative messages as well. BY SIGNING UP FOR THE SERVICE, YOU AGREE TO RECEIVE TEXT, EMAIL, APPLICATION, and/or FACEBOOK MESSAGES FROM GROUPCENTRIC, AND YOU REPRESENT AND WARRANT THAT EACH PERSON YOU ADD TO A GROUP HAS CONSENTED TO RECEIVE SIMILAR MESSAGES.

Stopping Messages

Too permanently cease receiving messages from any group go the application and select “Remove” to leave a group and thus stop receiving messages from other members. Groupcentric service into a particular group can only be resumed by being re-invited by an existing group member.

TEXT MESSAGE FEES

Shizzlr does not charge a fee to use the Service, but any text messages sent and/or received are subject to standard text messaging rates. Additionally, text messages sent and/or received count towards any monthly quota as any other messages do. Any users, whether sending or receiving text messages with Groupcentric, should be aware that standard text messaging rates may apply. Please be aware that texting charges can fluctuate internationally. Text messaging rates can normally be found by asking your service provider.

FEEDBACK AND IDEA SUBMISSION

Groupcentric and its employees do not accept or consider unsolicited ideas, including ideas for new advertising campaigns, new promotions, new or improved products or technologies, product enhancements, processes, materials, marketing plans or new product names. Please do not submit any unsolicited ideas, original creative artwork, suggestions or other works ("submissions") in any form to Groupcentric or any of its employees. The purpose of this policy is to avoid potential misunderstandings or disputes when Groupcentric’s products or marketing strategies might seem similar to ideas submitted to Groupcentric. If, despite our request that you not send us your ideas, you submit them nonetheless, then regardless of what your letter says, the following terms shall apply to your submissions.

Terms of Idea Submission

By sending us any submissions, you agree that (i) such submissions and their contents will automatically become the property of Groupcentric and Groupcentric shall be entitled to the unrestricted use of such submission for any purpose whatsoever, commercial or otherwise, without compensation or attribution to you, (ii) such submissions do not contain the confidential or proprietary information of third parties, (iii) Groupcentric will consider the submissions to be non-confidential and non-proprietary, (iv) Groupcentric may already be independently considering or developing a similar concept, and (v) Groupcentric will have no obligations concerning such submissions, contractual or otherwise (including, but not limited to, any obligation or request to keep such submissions confidential).

Product Feedback

Shizzlr welcomes your feedback regarding the Service. If you want to send us your feedback, and we hope you do, please send it to us at feedback@groupcentric.com. Please only provide specific feedback on Shizzlr’s existing products or marketing strategies.

Any feedback you provide to Groupcentric or any of its employees shall be deemed to be non-confidential. Groupcentric shall be entitled to the unrestricted use of the feedback for any purpose whatsoever, commercial or otherwise, without compensation or attribution to you.

TERMS FOR DEVELOPERS

If you are a developer or operator of any application or service that uses Groupcentric’s application programming interface(s) you also agree to Groupcentric’s Platform Policy and SDK License Agreement.

THIRD PARTY LINKS

The Service may contain links to third-party websites or resources. You acknowledge and agree that we are not responsible or liable for: (i) the availability or accuracy of such websites or resources; or (ii) the content, products, or services on or available from such websites or resources. Links to such websites or resources do not imply any endorsement by Groupcentric of such websites or resources or the content, products, or services available from such websites or resources. You acknowledge sole responsibility for and assume all risk arising from your use of any such websites or resources.

LIMITATION OF LIABILITY

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, GROUPCENTRIC AND ITS AFFILIATES, OFFICERS, EMPLOYEES, AGENTS, PARTNERS AND LICENSORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, WITHOUT LIMITATION, LOSS OF PROFITS, DATA, USE, GOODWILL, OR OTHER LOSSES, TANGIBLE OR INTANGIBLE (EVEN IF GROUPCENTRIC HAS BEEN ADVISED OF THE POSSIBILITY OF THESE DAMAGES), RESULTING FROM (i) YOUR ACCESS TO OR USE OF OR INABILITY TO ACCESS OR USE OF THE SERVICES; (ii) ANY CONDUCT OR CONTENT OF ANY THIRD PARTY IN CONNECTION WITH THE SERVICES, INCLUDING, WITHOUT LIMITATION, ANY DEFAMATORY, OFFENSIVE OR ILLEGAL CONDUCT OF OTHER USERS OR THIRD PARTIES; (iii) ANY CONTENT OBTAINED FROM THE SERVICES; AND (iv) UNAUTHORIZED ACCESS, USE OR ALTERATION OF TRANSMISSIONS OR CONTENT, WHETHER BASED ON WARRANTY, CONTRACT, TORT (INCLUDING NEGLIGENCE) OR ANY OTHER LEGAL THEORY, WHETHER OR NOT GROUPCENTRIC HAS BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGE, AND EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSEBECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION ON CONSEQUENTIAL OR INCIDENTAL DAMAGES MAY NOT APPLY TO YOU.

TERMINATION

We reserve the right to block access to any Content and to terminate your or any group member’s access to the Service at any time, with or without cause, with or without notice, effective immediately. Provisions of the Terms which on their face are intended to survive shall survive such termination.

DISCLAIMER OF WARRANTIES

YOUR USE OF THE SERVICE IS AT YOUR SOLE RISK. THE SERVICE IS PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. GROUPCENTRIC AND ITS AFFILIATES EXPRESSLY DISCLAIM ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. SHIZZLR DOES NOT GUARANTEE THE ACCURACY, COMPLETENESS, AVAILABILITY OR USEFULNESS OF THE SERVICE, AND YOU USE AND RELY ON THE SERVICE AT YOUR OWN RISK. ANY MATERIAL TRANSMITTED OR STORED THROUGH USE OF THE SERVICE IS DONE AT YOUR OWN DISCRETION AND RISK AND YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGE OR LOSS OF DATA THAT RESULTS FROM THE TRANSMISSION OF ANY MATERIAL THROUGH THE SERVICE. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM GROUPCENTRIC OR THROUGH OR FROM THE SERVICE WILL CREATE ANY WARRANTY NOT EXPRESSLY STATED IN THIS AGREEMENT. SOME STATES MAY PROHIBIT A DISCLAIMER OF WARRANTIES AND YOU MAY HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE.

IMDEMNIFICATION

You shall indemnify, defend, and hold Groupcentric, its affiliates, officers, directors, employees and contractors, harmless from any and all claims, damages, losses, liabilities, actions, judgments, costs, and expenses (including reasonable attorneys' fees) brought by a third party arising out of or in connection with: (a) any act or omission by you, in connection with your use of the Content or the SDK,; (b) your use of the Content or the SDK other than as expressly permitted hereby; or (c) your breach or alleged breach of any of the terms, restrictions, obligations or representations under this agreement. You will assume control of the defense and settlement of any claim subject to indemnification by you. Groupcentric may, however, at any time, elect to take over control of such defense and settlement of any such claim and still seek indemnification for any damages, costs and fees associated therewith. In any event, you will not settle any such claim without Groupcentric's prior written consent.

GENERAL

Changes to this Agreement

Groupcentric may, from time to time, update or modify the Terms of Use, SDK, Rules, and other terms and conditions at its sole discretion by posting the changes on the Site or by otherwise notifying you (such notice may be via email). Such changes will be effective immediately for current and new users of the Service. Continued use of the Service following notice of such changes shall indicate your acknowledgement thereof and agreement to be bound thereby. The date on which the latest update was made is indicated at the top of this document. We recommend that you print a copy of this Agreement for your reference and revisit this policy from time to time to ensure you are aware of any changes. If any change is unacceptable to you, your only recourse is to terminate this agreement by ceasing all use of Service and Content.

Notice

You are responsible for providing Groupcentric with your most current e-mail address. In the event that the last e-mail address you have provided to Groupcentric is not valid, or for any reason is not capable of delivering to you any notices required/permitted by this Agreement, Groupcentric’s dispatch of the e-mail containing such notice will nonetheless constitute effective notice. Any notice provided to Groupcentric pursuant to this Agreement should be sent to:

Shizzlr, Inc.
236 Southland Drive
Orange, CT 06477
Or support@groupcentric.com

Groupcentric is a trade name of Shizzlr, Inc., a Delaware corporation.

Arbitration and Governing Law

In the event a dispute arises between you and Groupcentric, please contact Groupcentric. Any dispute arising from or relating to the subject matter of this Agreement shall be finally settled by arbitration in Fairfield or New Haven Counties, Connecticut, using the English language in accordance with the Arbitration Rules and Procedures of Judicial Arbitration and Mediation Services, Inc. ("JAMS") then in effect, by one commercial arbitrator with substantial experience in resolving intellectual property and commercial contract disputes, who shall be selected from the appropriate list of JAMS arbitrators in accordance with the Arbitration Rules and Procedures of JAMS. The prevailing party in any arbitration or other proceeding arising under this Agreement shall be entitled to receive reimbursement of its reasonable expenses (including reasonable attorneys' fees, expert witness fees and all other expenses) incurred in connection therewith. Judgment upon the award so rendered may be entered in a court having jurisdiction or application may be made to such court for judicial acceptance of any award and an order of enforcement, as the case may be. Notwithstanding the foregoing, each party shall have the right to institute an action in a court of proper jurisdiction for injunctive or other equitable relief pending a final decision by the arbitrator. For all purposes of this Agreement, the parties consent to exclusive jurisdiction and venue in the United States Federal Courts or state courts located in the Fairfield County or New Haven County, Connecticut. Use of the Site/Service is not authorized in any jurisdiction that does not give effect to all provisions of the Agreement, including without limitation, this section. You and Groupcentric agree that any cause of action arising out of or related to the Site and Service or this Agreement must commence within one (1) year after the cause of action arose; otherwise, such cause of action is permanently barred. This Agreement shall in all respects be interpreted and construed with and by the laws of the State of New York, excluding its conflicts of laws rules, and the laws of the United States of America.

Should you have a dispute with one or more users, or an outside party, you release Groupcentric (and Groupcentric’s officers, directors, agents, subsidiaries, joint ventures and employees) from any and all claims, demands and damages (actual and consequential) of every kind and nature, known and unknown, suspected and unsuspected, disclosed and undisclosed, arising out of or in any way connected with such disputes. Groupcentric encourages users to report user-to-user disputes to your local law enforcement, postmaster general, or a certified mediation or arbitration entity, as applicable. Groupcentric has no obligation to resolve disputes between users or between users and outside parties.

A printed version of these Terms of Use and of any notice given in electronic form shall be admissible in judicial or administrative proceedings based upon or relating to these Terms of Use to the same extent and subject to the same conditions as other business documents and records originally generated and maintained in printed form. You and Groupcentric agree that any cause of action arising out of or related to the Service must commence within one (1) year after the cause of action arose; otherwise, such cause of action is permanently barred.

Severability

These Terms of Use are the entire agreement between you and Groupcentric with respect to the Service and use of the Site, Service, Content, User Submissions or Add-to Link, and supersede all prior or contemporaneous communications and proposals (whether oral, written or electronic) between you and Groupcentric with respect to the Service. If any provision of these Terms of Use is found to be unenforceable or invalid, that provision will be limited or eliminated to the minimum extent necessary so that these Terms of Use will otherwise remain in full force and effect and enforceable. The failure of either party to exercise in any respect any right provided for herein shall not be deemed a waiver of any further rights hereunder. Waiver of compliance in any particular instance does not mean that we will waive compliance in the future. In order for any waiver of compliance with these Terms of Use to be binding, Groupcentric must provide you with written notice of such waiver through one of its authorized representatives.

Entire Agreement

This Agreement is the final, complete and exclusive agreement of you and Groupcentric with respect to the subject matters hereof (including the Service) and supersede and merge all prior discussions and agreements between the parties with respect to such subject matters. The section titles in this Agreement are for convenience only and have no legal or contractual effect. The word “including” means including without limitation. Your relationship to Groupcentric is that of an independent contractor, and neither party is an agent or partner of the other. This Agreement, and your rights and obligations herein, may not be assigned by you without Groupcentric’s prior written consent, and any attempted assignment in violation of the foregoing will be null and void. Groupcentric may assign this Agreement in connection with a merger, acquisition, reorganization, dissolution, or sale of all or substantially all of its assets, or other operation of law, without your consent. The terms of this Agreement shall be binding upon assignees.

Effective Date: January 1, 2013

By using the Service you are indicating that you have read, understood, and agree to the updated Terms of Service.

Core Concepts

  • Overview
  • Groups
  • Group Chat
  • Sharing Content

Getting Started

Jump into our SDK and start integrating in minutes.

Getting started using the Groupcentric SDK is super easy. Simply sign up and create an app key in our Developer Dashboard. Then check out our walkthroughs to get started in either Android or iPhone.

Download the SDK

Your users can have Private Groups


Give your users the ability to have their own private groups of friends within your app. This will increase their engagement with your app as well as increase the virality of your app as they invite their friends into their groups.

Each group object contains an ID, group image, group name, last updated timestamp, and a list of people in the group. There are other attributes like 'LastMessage' and 'New' to mark if a group is new/updated respective to each person in the group.



An example app with the SDK...



Group Chat with Rich Content


Opening a group, you will see the group chat. A group chat is just a list of messages, and each message contains who said what and when they said it, but GroupCentric's group chat allows for rich content like pictures, websites, gps coordinates, events, and any custom content that you might want to include from your own app.

The idea of rich content within a chat is enabled by using a 'Type' for each message. By using a 'Type', many objects can be shared into a chat because the app will be coded to know how to render any given type.





Share content from your app


The great thing about allowing your users to have private groups in your app so they can chat with their friends is that they will be sharing your app content into their groups to talk about. Sharing rich content, your content, is a huge part of the value of using this SDK. It's designed to so you can allow you're users to share your content as dynamic objects that you control; events, recipes, calendars, exercises, movie reviews, and on and on.





Android

  • Getting Started in 10 Minutes
  • Sharing Content
  • Sharing Custom Content
  • In-app notifications
  • Push Notifications
  • Example App

Add groups to your app in 10 minutes


1) Download the Android Groupcentric SDK (here if you haven't). Then signup here which will bring you into the Developer Dashboard. Then within the dashboard add an app to get an SDK Key; each app will have it's own SDK Key so if you create another app you will need another SDK Key.



2) Add the SDK to Eclipse.


  • If you downloaded the zip from Github then extract it
  • Open Eclipse
  • File > Import > Android > Existing code into Workspace
  • Browse to and select your SDK folder.
    (ex: ...\Downloads\GroupcentricSDK_Android-master\GroupcentricSDK_Android-master)
  • Check off the project and 'Copy projects into workspace'
  • Finish


3) Add the GroupcentricSDK your app project.

  • Open your project in Eclipse
  • Right click your project and select 'Properties'
  • Select 'Android'
  • At the bottom under 'Library' click 'Add' and find the GroupcentricSDK_Android project.

*note: the minimum Android SDK version is 8. You will need to upgrade your android:minSdkVersion in your manifest to at least 8.
*note: if you see this error "Found 2 versions of android-support-v4.jar in the dependency list" then do the following. Go into your file explorer, copy the android-support-v4.jar from the SDK into your project's lib. Restart Eclipse.



4) Add your SDK Key to your project


  • Add a file 'groupcentric.properties' to your assets folder
  • In that file add the following to set your SDK Key:

        groupcentric.apikey=axFFFF782eRjj9791


5) Add a new activity to your project called 'GroupsActivity'.
This activity will be used to show a list of a users groups. Add in any of your header/nav/menus/etc to match your app if you want. Make sure to add this activity to your manifest.



6) Make your 'GroupsActivity.java' extend FragmentActivity, implement GroupcentricNotificationsButtonListenerClass, and include the following imports

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import android.os.Bundle;
import com.groupcentric.android.gc_GroupsListFragment;
import android.content.res.AssetManager;
import com.groupcentric.android.gc_NotificationsButton;
import android.support.v4.app.FragmentActivity;

//this activity must extend FragmentActivity to get the GroupsListFragment to work
public class GroupsActivity extends FragmentActivity implements com.groupcentric.android.gc_GroupsListFragment.GroupcentricNotificationsButtonListener {

*note:You will get an error about an unimplemented method. That is taken care of in step 8 below.



7) In the onCreate method of your GroupsActivity.java add in this code to get your Groupcentric APIKey from the properties file you created in step 4:

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_groups);

     ...

try {
     AssetManager am = this.getAssets();
     InputStream is;
     is = am.open("groupcentric.properties");
     Properties properties = new Properties();
     properties.load(is);
     String groupcentricAPIKey = properties.getProperty("groupcentric.apikey");
     gc_GroupsListFragment fragment =
          (gc_GroupsListFragment)getSupportFragmentManager()
          .findFragmentById(R.id.list);
     fragment.setGroupcentricAPIKey(groupcentricAPIKey);
} catch (IOException e) {}

*note: just be sure that super.onCreate is before setContentView



8) At the bottom of your GroupsActivity.java add this function:

public void onGroupcentricNotificationsCheck(int updatecount) {
     gc_NotificationsButton gc_notifications = (gc_NotificationsButton) getSupportFragmentManager()
          .findFragmentById(R.id.gc_notifications_btn);
     // pass the in-app notifications count to the button fragment
     gc_notifications.updateButton(updatecount);
}


9) In your layout for GroupsActivity, include the GroupsListFragment. You can add in any header/nav/menu/etc elements too of course.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:id="@+id/layout_groups" >

     <!--Add in any header/nav/menu elements, be sure to include the following-->

     <fragment class="com.groupcentric.android.gc_GroupsListFragment"
          android:id="@+id/list"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />


</LinearLayout>

In the header/nav/menu of the layout add this fragment to your layout and modify as needed; this is the notifications button. It is discussed further in the In-app Notifications section.


<fragment
    android:id="@+id/gc_notifications_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="com.groupcentric.android.gc_NotificationsButton"/>



At this point your GroupsActivity Class should be similar to this: gettingstarted_groupsactivity.java
At this point your GroupsActivity Layout should be similar to this: gettingstarted_groupsactivity.xml


10) Within your main layout, add a button anywhere to launch your GroupsActivity; preferably in your apps menu/navigational bar and label it 'Groups'


Handle the onClick of the Groups button by starting the GroupsActivity


@Override
public void onClick(View v) {
     switch (v.getId()) {
         case R.id.btn_groups:
              startActivity(new Intent(this, GroupsActivity.class));
              break;
     }
}



11) Make sure your manifest has these permissions:


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


12) Add the following activities to your manifest


<!--Groupcentric Requirements for activities-->
<activity android:name="com.groupcentric.android.gc_AttachItem"
    android:theme="@style/gc_FadeInFadeOutTranslucentTheme"/>
<activity android:name="com.groupcentric.android.gc_ContactList"/>
<activity android:name="com.groupcentric.android.gc_EditGroupName"
    android:theme="@style/gc_FadeInFadeOutTranslucentTheme"/>
<activity android:name="com.groupcentric.android.gc_GPS"
    android:theme="@style/gc_FadeInFadeOutTranslucentTheme"/>
<activity android:name="com.groupcentric.android.gc_GroupDetails"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:windowSoftInputMode="adjustPan"/>
<activity android:name="com.groupcentric.android.gc_NotificationsList"/>
<activity android:name="com.groupcentric.android.gc_PictureViewer"/>
<activity android:name="com.groupcentric.android.gc_Profile"/>
<activity android:name="com.groupcentric.android.gc_ProfileWebView"/>
<activity android:name="com.groupcentric.android.gc_ShareSelector"/>
<activity android:name="com.groupcentric.android.gc_ShareWebLink"/>
<activity android:name="com.groupcentric.android.gc_StartGroup"/>
<activity android:name="com.groupcentric.android.gc_Type4Details"/>
<activity android:name="com.groupcentric.android.gc_UploadImage"
    android:theme="@style/gc_FadeInFadeOutTranslucentTheme"/>
<!--end of Groupcentric Requirements for activities-->

* note if you do this and have an issue with the ActionBar in Jelly Bean then you will need to add android:theme="@style/NoActionBar" for the following activites: gc_ContactList, gc_GroupDetails, gc_NotificationsList, gc_PictureViewer, gc_Profile, gc_ShareSelector, gc_ShareWebLink, gc_StartGroup, gc_Type4Details




That's it. Build your project and enjoy!


Access the Groupcentric SDK here


Access the Eventcentric demo app here








Share your content into groups


Sharing pics, location, and websites is prebuilt into the SDK. This is how you take content in your app and let your users share it into their groups with their friends and family so they can chat about it.



Sharing a website or anything with a url

Message Type 3

Use Type 3 when you want to let a user share content that when tapped on within a group chat will open up a website. Examples are endless but a few could be a place of interest, news article, movie trailor, and any other content that you have a mobile webpage for.


Let's assume you have an app that lists restaurants and each restaurant has a website associated with it. First thing to do is add a Share button like so:



When a user taps the share button, the app starts the gc_ShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the restaurant to.


You must use the following code to handle the Share button. All Extras are required even if blank.


@Override
public void onClick(View v) {
     switch (v.getId()) {
          case R.id.share_btn:
              startActivity(new Intent(this, gc_ShareSelector.class)
                  .putExtra("APIKey", GroupcentricAPIKey)
                  .putExtra("MessageType", "3")
                  .putExtra("ObjectTitle", "michael Jordan Steakhouse")
                  .putExtra("ObjectImage", "http://ourrestaurants.com/images/michaeljordansteakhouse.jpg")
                  .putExtra("ObjectURL", "http://michaeljordansteakhouse.com")
              );
          break;
     }
}

The result in the users group chat will look like the following, and when it's tapped on it will open up the ObjectURL website you passed in the Extras.






Sharing a generic object (anything with a picture, title, subtitle, details, etc)

Message Type 4

Use Type 4 when you want to allow your users to share content a little more complex than just a picture or something that opens a website. It's important to note that the details of a Type 4 object can handle HTML markup. Some examples could be a food recipe, a schedule, or a coupon. Leveraging the HTML markup in the details can allow you to share some pretty cool content.


Let's take a look at our example app that allows users to share Eventbrite events into a group. When a user taps on an event to look at its details, we put a 'Share' button in the top corner.



When a user taps the share button, the app starts the gc_ShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the event to.


Let's look at the first way the event can be shared (Message Type 4). This Eventbrite events app has an 'event' object class. The following code gets executed when the share button is tapped. All those Extras are required even if blank for a Message of Type 4. From this point on the Groupcentric SDK will handle the rest of the process.


@Override
public void onClick(View v) {
     switch (v.getId()) {
          case R.id.share_btn:
              startActivity(new Intent(this, gc_ShareSelector.class)
                  .putExtra("APIKey", GroupcentricAPIKey)
                  .putExtra("MessageType", "4")
                  .putExtra("ObjectTitle", event.getName())
                  .putExtra("ObjectSubtitle", event.getLocation())
                  .putExtra("ObjectImage", event.getImage())
                  .putExtra("ObjectDate", event.getDate())
                  .putExtra("ObjectDetails", event.getDescription())
                      //details can contain HTML markup
                  .putExtra("ObjectURL", "") //if event had a url put it here              );
          break;
     }
}

The result in the users group chat will look like the following



When a user taps on that event within the group chat, it will open up a generic object View with all the information that was just supplied in the Extras. Note - the 'details' Extra will be displayed within a WebView in the generic object View.


In this event example, if we had an event website and wanted it to open that website directly we could do so using a Message of Type 3:


@Override
public void onClick(View v) {
     switch (v.getId()) {
          case R.id.share_btn:
              startActivity(new Intent(this, gc_ShareSelector.class)
                  .putExtra("APIKey", GroupcentricAPIKey)
                  .putExtra("MessageType", "3")
                  .putExtra("ObjectTitle", event.getName())
                  .putExtra("ObjectImage", event.getImage())
                  .putExtra("ObjectURL", "http://someeventwebsite.com/eventid1234")
              );
          break;
     }
}

The result in the users group chat will look almost the same, however this time when a user taps on the event from within the chat it will open up the event url in a web browser.





Sharing an image or picture

Message Type 1

This type is built into the group chat already so a user can share a picture from their phone, but let's assume you have an app about food and you have a great photo gallery you'd like your users to be able to share.


The first thing to do is add a Share button to your images like so:



When a user taps the share button, the app starts the gc_ShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the food image to.


You must use the following code to handle the Share button. Note the ObjectImage extra is the URL to the image.


@Override
public void onClick(View v) {
     switch (v.getId()) {
          case R.id.share_btn:
              startActivity(new Intent(this, gc_ShareSelector.class)
                  .putExtra("APIKey", GroupcentricAPIKey)
                  .putExtra("MessageType", "1")
                  .putExtra("ObjectImage", "http://favefoods.com/images/steak1.jpg")
          break;
     }
}

The result in the users group chat will look like the following, and when it's tapped on it will open up the full image.






One Requirement to Share - Groupcentric API Key

In all the examples above, notice along with the content shared, you must pass your Groupcentric API Key. It's up to you of course how you grab it from your groupcentric.properties file, but one simple solution is to drop this code into any class where you need it:


try {
     AssetManager am = this.getAssets();
     InputStream is;
     is = am.open("groupcentric.properties");
     Properties properties = new Properties();
     properties.load(is);
     GroupcentricAPIKey = properties.getProperty("groupcentric.apikey");
} catch (IOException e) {}




Sharing Custom Content


If you have content in your app that you can't use one of the predefined group chat message types mentioned in 'Sharing Content' then this is the place to be.


First let's take a look at a message. Each chat message has the following fields:


  • message [the users message]
  • type [the type of message, integer, default 0]
  • var1 [string] used as a wildcard placeholder like for a URL or object ID
  • imageurl [string]
  • var_title [string]
  • var_subtitle [string]
  • var_date [string]
  • var_details [string that may contain html/xml markup]
  • var_markup [string that may contain html/xml markup]

Requirements

You may use all of these fields to handle your custom content. There are three requirements.


1) Any custom message types you make must be greater than 100.


2) You are responsible for a user tapping on any messages of your custom type.


3) The message type must have a title (var_title) and image (imageurl) that will be used to display the message within the chat.



A Simple Example

Let's say you have a restaurant app that lists restaurants. You want your users to be able to share a restaurant into a group chat. Let's assume that each restaurant in your system has a RestaurantID and when it's tapped on it will open up the restaurant details. We want this behavior to occur when a user taps on a shared restaurant within a group chat too.


So start off by adding a share button to your restaurant details activity/view.



Handle the onclick of that share button like so, notice we'll use Message Type 101 (any type > 100 will work). We've included the Restaurant title and a picture for the chat, and the RestaurantID is saved in the Var1 field and will be used to handle the onClick functionality:


@Override
public void onClick(View v) {
     switch (v.getId()) {
          case R.id.share_btn:
              startActivity(new Intent(this, gc_ShareSelector.class)
                  .putExtra("APIKey", GroupcentricAPIKey)
                  .putExtra("MessageType", "101")
                  .putExtra("ObjectTitle", "michael Jordan Steakhouse")
                  .putExtra("ObjectImage", Restaurant_Image_URL)
                  .putExtra("ObjectVar1", RestaurantID)
              );
          break;
     }
}

//other extra you could use:
//.putExtra("ObjectSubtitle",
//.putExtra("ObjectDate",
//.putExtra("ObjectDetails",
//.putExtra("ObjectMarkup",

Now the second part, handling the ontap functionality of the Restaurant message type.


1) Open the group details chat adapter in the SDK, gc_GroupChatAdapter.java


2) Find the getView function and search for "//CUSTOM OBJECTS" around line 274


3) You will have to implement the following for your custom object type(s). In this restaurant example we do the following:


//YOUR CUSTOM OBJECTS
//if you're using custom objects in the chat then
//you need to implement the following for each one of your types

//set the image in the chat message ui
imgDownloader2.download(item.getImageurl(), vh.imgAttachedwebsite);
//set the title in the chat message ui
vh.txtwebsitetitle.setText(item.getVar_title());
vh.rel_attachedcustom.setTag(position);

vh.rel_attachedcustom.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
          Integer pos = (Integer) v.getTag();
          Message ms = getItem(pos);
          //set the onClick to your own function here
          // if(ms.getMsgType() == <YOURTYPE>) { //<-- your type number here
          //{
               //Change the function name only
               //((gc_GroupDetails) mContext).<YOUR FUNCTION NAME>(ms);
          //}
     }
});

4) Now find the GroupDetails activity gc_GroupDetails.java


5) Add your custom object on tap function in here. Search for the function 'DEVELOPER_FUNCTION_FROM_CUSTOM_OBJECT_CLICK_IN_gc_GroupChatAdapter' at the bottom of gc_GroupDetails.java and replace/update that with your functionality.. Following our restaurant example:


public void restaurantCustomObjectTapped(Message ms)
{
     //access all the message data via methods:
     //ms.getVar1();
     //ms.getVar_title();
     //ms.getVar_subtitle();
     //ms.getVar_date();
     //ms.getVar_details();
     //ms.getVar_markup();
     //ms.getImageurl();
     
     //open up Restaurant details activity given the Restaurant ID stored in the var1 of the message
     String restaurantID = ms.getVar1();
     startActivity(new Intent(this, RestaurantDetails.class)
     .putExtra("restaurantid",restaurantID);
}


Notice that you can access all the message data in step 5. So if you had for example a concert schedule and it was marked up in XML, well you could make a custom message object and access the data through these methods and then its up to you to render your object when a user taps it.







In-app Notifications


In-app notifications are important for the user experience as well as they allow you to communicate very effictively with your users. In-app notifications are mostly updates to users groups like a new message for example. You can also push your own in-app notifications to your app through the Developer Dashboard.


What they look like

In-app notifications are in a list that pops up from a button in the header/nav bar (or wherever you would like to put it). This is how they look:




Integrating into your app (5 steps)

1) You'll want 2 images for in-app notifications, one to represent 'New' notifications, and one to represent nothing new. The ones used are in the SDK (notifications_active.PNG and notifications_inactive.PNG). Change them if you'd like, just keep the same file names.





2) In the header/nav/menu of wherever you'd like to make notifications accessible from, add this fragment to your layout and modify as needed:


<fragment
    android:id="@+id/gc_notifications_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="com.groupcentric.android.gc_NotificationsButton"/>

3) In any activity with the in-app notifications button add:


import com.groupcentric.android.gc_NotificationsButton;


4) Make sure those activities implement the GroupcentricNotificationsButtonListener


implements com.groupcentric.android.gc_GroupsListFragment.GroupcentricNotificationsButtonListener


5) Finally implement the update notifications button method by adding the following code. This function is used to toggle the In-app notifications button to be active or not pending new updates, etc.


@Override
public void onGroupcentricNotificationsCheck(int updatecount) {
     gc_NotificationsButton gc_notifications = (gc_NotificationsButton)
     getSupportFragmentManager().findFragmentById(R.id.gc_notifications_btn);
     //pass the in-app notifications count to the button fragment
     gc_notifications.updateButton(updatecount);
}


In-app Notification Object

Each notification has the following fields:


  • title
  • subtitle
  • dateof
  • imageurl
  • action
  • actionvariable
  • expiration

The users see the title, subtitle, dateof, and imageurl fields. The expiration is when this notification will disappear. The action and actionvariable are used by the app to determine what to do when the user taps on the notification.



Notification Action Types

Each in-app notification has an action associated with it. The 'action' field is an enumerated integer. There are two pre-defined action types 0 and 1.


action: 0 actionvariable: groupid
ontap: the app will open the users group associated with the groupid
note: this type is for groups only


action: 1 actionvariable: website url
ontap: the app will open a browser with the give website url



Example use of an action type 1

Say you have a restaurant app, and you want to advertise the night's specials. Open up the Developer Dashboard, select the Notifications tab, and input your notification criteria. Set the action = 1 and the actionvariable to a url that contains your specials. When you hit the send button, your users will recieve a notification that might look like the following, and when they tap it will bring them to your specials web page.




Custom In-app Notification Actions

You can create your own custom notification actions by using any action type above 1. Let's say for example you have a restaurant app and each restaurant has a restaurant ID. You can send a notification with an action = 2 and an actionvariable = some restaurant ID. The idea being when a user taps on that notification, that it opens up your restaurant details activity associated with that restaurant ID. In order for this to happen you will have to open up gc_NotificationsList.java in the SDK


You will see an onClickListItemClick function listening for users tapping on the in-app notifications. Action type 0 and 1 are handled here (opening a group and a website, respectively).


This is where you add code to handle your own custom in-app notification types. Like for this restaurant example, if the action = 2, grab the RestaurantID stored as the actionvariable, and start the RestaurantDetails activity and pass it the Restaurant ID:


else if (m_adapter.getItem(position).getAction() == 2) {
    //open up Restaurant details activity given the Restaurant ID stored in the actionvariable of the notification
    String restaurantID = m_adapter.getItem(position).getActionvariable();
    startActivity(new Intent(this, RestaurantDetails.class)
    .putExtra("restaurantid",restaurantID)
}




Setting up Push Notifications


Note: Currently to get push notifications to groups in your app, we require you setup an Urban Airship account. We are developing our own push notification services, but currently only support working with Urban Airship.


Setup an Urban Airship account

Go to Urban Airship and register for an account. Urban Airship is an experienced push notification service provider and their basic package is FREE.


Once you've setup an account, add an app to your account. Be sure to select 'Push Enabled'


Next add your Android package name


Now you will see your Urban Airship credentials.


Copy your credentials into the Groupcentric Developer Dashboard



Setup your app (5 steps)

1) If you have a class that extends Application then modify it to include the following, else create a class called App.java


//App.java

import com.urbanairship.UAirship;
import com.urbanairship.push.PushManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class App extends Application {
    public static final String IncomingGCPushMSG = "incomingGCPushMSG";

    @Override
    public void onCreate() {
        super.onCreate();
        //this starts the Urban Airship push notification registration
        UAirship.takeOff(this);
        gc_CustomUANotification nb = new gc_CustomUANotification();
        PushManager.shared().setNotificationBuilder(nb);
        PushManager.enablePush();
        PushManager.shared().setIntentReceiver(com.groupcentric.android.gc_UAIntentReceiver.class);
        registerReceiver(UAReceiver, new IntentFilter(IncomingGCPushMSG));
    }

    public BroadcastReceiver UAReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) { }
    };
}

2) In your Manifest add name='App' as an attribute of application


<application
    android:name="App"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

3) Create a file in your assets folder called airshipconfig.properties with the following content. Note: transport can be helium or GCM depending on your UA account setup.


transport = helium
developmentAppKey = Your Development App Key
developmentAppSecret = Your Development App Secret
productionAppKey = Your Production App Key
productionAppSecret = Your Production App Secret
inProduction = true
iapEnabled = false

4) Add the following to your Manifest


<!-- Urban Airship Requirements In App Element -->
    <service android:name="com.groupcentric.android.gc_UpdateUATokenService"/>

    <receiver android:name="com.urbanairship.CoreReceiver" >
        <!-- REQUIRED IntentFilter - For Helium and Hybrid -->
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.ACTION_SHUTDOWN" />
        </intent-filter>
    </receiver>

    <service android:name="com.urbanairship.push.PushService"/>
    <service android:name="com.urbanairship.push.PushWorkerService"/>
    <service android:name="com.urbanairship.analytics.EventService"/>
    <receiver android:name="com.groupcentric.android.gc_UAIntentReceiver" />

    <!-- This is required for persisting preferences related to push and location -->
    <provider android:name="com.urbanairship.UrbanAirshipProvider"
        android:authorities="com.groupcentric.android.urbanairship.provider"
        android:exported="false"
        android:multiprocess="true" />

<!-- End Of Urban Airship Requirements In App Element -->

Also make sure you have the following permissions in your Manifest (avoid duplicates of course)


<!-- Urban Airship Permission Requirements -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
<!-- End Urban Airship Permission Requirements -->


If you already use Urban Airship (2 steps)

1) Add the following to your Manifest


<service android:name="com.groupcentric.android.gc_UpdateUATokenService"/>

2) In your UA intent reciever add/update the following to your onRecieve function. You will probably have to import com.groupcentric.android.* as well.


@Override
public void onReceive(Context context, Intent intent) {
    ...
    } else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) {
        if(intent.getExtras().size() > 0)
        {
            //look for the default extra key that ua allows developers to use
            String val = intent.getStringExtra("com.urbanairship.push.EXTRA");
            if (val==null)
                val = "";
            if(val.indexOf("GroupID")> -1)
            {
                //its a groupid so open up that group
                //check for a userid, if no userid cuz user logged out then dont put them into group details and instead send to main activity of app
                var = new gc_Variables(); //finish instantiating the GroupcentricVariables object which will give access to the Groupcentric UserID and APIKey
                if(var.getGroupcentricUserID(context) > 0)
                {
                    int groupid = Integer.parseInt(val.replace("GroupID", ""));
                    Intent launch = new Intent(Intent.ACTION_MAIN);
                    launch.setClass(UAirship.shared().getApplicationContext(),gc_GroupDetails.class);
                    launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    //launch.putExtra("groupid",groupid);
                    var.setGroupIDToOpen(UAirship.shared().getApplicationContext(),groupid);
                    UAirship.shared().getApplicationContext().startActivity(launch);
                }
                else
                {
                    //not sure what it might be but just open the app in general
                    launchAppHomeActivity();
                }
            }
            else
            {
                //extra from UA, up to you how you normally handle it

                //or not sure what it might be but just open the app in general
                launchAppHomeActivity();
            }
        }
        else
        {
            //no extras, up to you to handle
        }
    }

    ...

    else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) {
        ...your own code...
        //the following will update the users Groupcentric account so any messages get pushed to YOUR app

        //ua registration finished so this grabs the ua token and updates the users Groupcentric account with it
        GroupcentricReadWritePrefs rwPrefs = new GroupcentricReadWritePrefs();
        rwPrefs.readWriteUserSetting(UAirship.shared().getApplicationContext(), "Write","UAAPID",intent.getStringExtra(PushManager.EXTRA_APID));
            Intent iUpdateTokenService = new Intent(context, gc_UpdateUATokenService.class);
            context.startService(iUpdateTokenService);
    }
}




Our example is Eventcentric


Eventcentric is a Eventbrite event listings app with Groupcentric group chat.


The concept is simple; find an event and share it into one of your groups.


Events are shared as type 4 message objects in this app.


You can get the project source here on our Github page.



Select an event...



Tap the share button in event details...



Select a group of yours to share with...



Add a message with the event...



Now everyone in your group can check it out!






iPhone

  • Getting Started in 10 Minutes
  • Sharing Content
  • Sharing Custom Content
  • Better UI Integration
  • Push Notifications
  • Example App

Add groups to your app in 10 minutes


1) Download the iPhone SDK Framework (compiled ARC or compiled non-ARC). Then signup here which will bring you into the Developer Dashboard. Then within the dashboard add an app to get an API Key; each app will have it's own API Key so if you create another app you will need another API Key.



2) Add the SDK Framework to your project in Xcode.

  • Open your project in Xcode
  • Locate the GroupcentricSDK.EmbeddedFramework folder in Finder
  • Drag the GroupcentricSDK.EmbeddedFramework folder from finder into your Frameworks folder in Xcode.
  • Check off 'Copy items into destination group's folder' and click Finish



3) In your AppDelegate and/or whereever you want to use groups from within your app, include the SDK in your header files


#import <GroupcentricSDK/GroupcentricSDK.h>


4) In your AppDelegate modify didFinishLaunchingWithOptions to pass your APIKey to the GroupcentricSDK


- (BOOL)application:(UIApplication *) didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     [GroupcentricSDK initFrameworkWithAPIKey:@"YOUR_API_KEY"];

* note: use [GroupcentricSDK initFrameworkWithAPIKey:@"YOUR_API_KEY" andUrbanAirship:launchOptions]; if you want to use Urban Airship for push notifications.




5) Add the following frameworks if you don't have them. (Select your project on the top left > Build Phases > Link Binary With Libraries)


  • AddressBook.framework
  • AddressBookUI.framework
  • AudioToolbox.framework
  • AVFoundation.framework
  • CFNetwork.framework
  • CoreGraphics.framework
  • CoreLocation.framework
  • CoreTelephony.framework
  • Foundation.framework
  • ImageIO.framework
  • libsqlite3.dylib
  • libz.dylib
  • MapKit.framework
  • MediaPlayer.framework
  • MobileCoreServices.framework
  • QuartzCore.framework
  • Security.framework
  • StoreKit.framework
  • SystemConfiguration.framework
  • UIKit.framework


6) Add an action that will launch the groups view controller.


- (void) mygroupsTap:(id)sender {
     GCViewController *groupsVC = [[GCViewController alloc] init];
     [self.navigationController pushViewController:groupsVC animated:YES];
     [groupsVC release];
}


7) Add a button to your header/nav/menu and label it 'My Groups'. This button will be used to launch the groups view controller by calling the function you just made in step 6.




Access the Groupcentric SDK source and Eventcentric demo source in Github here



That's it. Build your project and enjoy!



Share your content into groups


Sharing pics, location, and websites is prebuilt into the SDK. This is how you take content in your app and let your users share it into their groups with their friends and family so they can chat about it.



Sharing a website or anything with a url

Message Type 3

Use Type 3 when you want to let a user share content that when tapped on within a group chat will open up a website. Examples are endless but a few could be a place of interest, news article, movie trailor, and any other content that you have a mobile webpage for.


Let's assume you have an app that lists restaurants and each restaurant has a website associated with it. First thing to do is add a Share button to your content:



When a user taps the share button, the app starts the GCShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the restaurant to.


Create a sharing function and within it use the following code. All parameters in the GCSharedObject variable are required even if blank, and an image and title are required to have values.


-(void)shareContent:(id)sender
{
    GCSharedObject *sharedObj = [[GCSharedObject alloc]
        initWithContent:3
        withTitle:@"Michael Jordan Steakhouse"
        withSubtitle:@""
        withImageURL:@"http://ourrestaurants.com/images/michaeljordans.png"
        withURL: "http://michaeljordansteakhouse.com"
        withDate:@""
        withDetails:@""
        withMarkup:@""];

    GCShareSelector *groupsVC = [[GCShareSelector alloc]
        initWithContent:sharedObj];
    [self.navigationController pushViewController:groupsVC animated:YES];
    [groupsVC release];
    [sharedObj release];
}

The result in the users group chat will look like the following, and when it's tapped on it will open up the ObjectURL website you passed in the url field.






Sharing a generic object (anything with a picture, title, subtitle, details, etc)

Message Type 4

Use Type 4 when you want to allow your users to share content a little more complex than just a picture or something that opens a website. It's important to note that the details of a Type 4 object can handle HTML markup. Some examples could be a food recipe, a schedule, or a coupon. Leveraging the HTML markup in the details can allow you to share some pretty cool content.


Let's take a look at our example app that allows users to share Eventbrite events into a group. When a user taps on an event to look at its details, we put a 'Share' button in the top corner.



When a user taps the share button, the app starts the GCShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the event to.


Let's look at the first way the event can be shared (Message Type 4). This Eventbrite events app has an 'event' object class. The following code gets executed when the share button is tapped. All those fields are required even if blank for a Message of Type 4, and again an image and title must have values at the minimum. From this point on the Groupcentric SDK will handle the rest of the process.


-(void)shareContent:(id)sender
{
    GCSharedObject *sharedObj = [[GCSharedObject alloc]
        initWithContent:4
        withTitle:[eventDetails objectForKey:@"name"]
        withSubtitle:[eventDetails objectForKey:@"placename"]
        withImageURL:[eventDetails objectForKey:@"picurl_small"]
        withURL:[eventDetails objectForKey:@"url"]
        withDate:[eventDetails objectForKey:@"eventdate"]
        withDetails:[eventDetails objectForKey:@"description"]
        withMarkup:@""];

    GCShareSelector *groupsVC = [[GCShareSelector alloc]
        initWithContent:sharedObj];
    [self.navigationController pushViewController:groupsVC animated:YES];
    [groupsVC release];
    [sharedObj release];
}

The result in the users group chat will look like the following



When a user taps on that event within the group chat, it will open up a generic object View with all the information that was just supplied in the fields. Note - the 'details' field will be displayed within a WebView in the generic object View.


In this event example, if we had an event website and wanted it to open that website directly we could do so using a Message of Type 3:


-(void)shareContent:(id)sender
{
    GCSharedObject *sharedObj = [[GCSharedObject alloc]
        initWithContent:3
        withTitle:[eventDetails objectForKey:@"name"]
        withSubtitle:@""
        withImageURL:[eventDetails objectForKey:@"picurl_small"]
        withURL:[eventDetails objectForKey:@"url"]
        withDate:@""
        withDetails:@""
        withMarkup:@""];

    GCShareSelector *groupsVC = [[GCShareSelector alloc]
        initWithContent:sharedObj];
    [self.navigationController pushViewController:groupsVC animated:YES];
    [groupsVC release];
    [sharedObj release];
}

The result in the users group chat will look almost the same, however this time when a user taps on the event from within the chat it will open up the event url in a web browser.





Sharing an image or picture

Message Type 1

This type is built into the group chat already so a user can share a picture from their phone, but let's assume you have an app about food and you have a great photo gallery you'd like your users to be able to share.


The first thing to do is add a Share button to your images like so:



When a user taps the share button, the app starts the GCShareSelector activity from the Groupcentric SDK. This Share Selector activity allows a user to select which of their groups they'd like to share the food image to.


You must use the following code to handle the Share button. Note the ObjectImage extra is the URL to the image.


-(void)shareContent:(id)sender
{
    GCSharedObject *sharedObj = [[GCSharedObject alloc]
        initWithContent:1
        withTitle:@""
        withSubtitle:@""
        withImageURL:@"http://favefoods.com/images/steak1.jpg"
        withURL:@""
        withDate:@""
        withDetails:@""
        withMarkup:@""];

    GCShareSelector *groupsVC = [[GCShareSelector alloc]
        initWithContent:sharedObj];
    [self.navigationController pushViewController:groupsVC animated:YES];
    [groupsVC release];
    [sharedObj release];
}

The result in the users group chat will look like the following, and when it's tapped on it will open up the full image.






One Requirement to Share - An image and title

For any object you're sharing that is a Type 3, 4, or custom, you must include an image url and a title. These values will be used to display your object within the group chat as seen above. A picture (Type 1) doesn't have a title.






Sharing Custom Content


If you have content in your app that you can't use one of the predefined group chat message types mentioned in 'Sharing Content' then this is the place to be.


First let's take a look at a message. Each chat message has the following fields:


  • message [the users message]
  • type [the type of message, integer, default 0]
  • var1 [string] (withURL) used as a wildcard placeholder like for a URL or object ID
  • imageurl [string] (withImageURL)
  • var_title [string] (withTitle)
  • var_subtitle [string] (withSubtitle)
  • var_date [string] (withDate)
  • var_details [string that may contain html/xml markup] (withDetails)
  • var_markup [string that may contain html/xml markup] (withMarkup)

Requirements

You may use all of these fields to handle your custom content. There are three requirements.


1) Any custom message types you make must be greater than 100.


2) You are responsible for a user tapping on any messages of your custom type.


3) The message type must have a title (withTitle) and image (withImageURL) that will be used to display the message within the chat.



A Simple Example

Let's say you have a restaurant app that lists restaurants. You want your users to be able to share a restaurant into a group chat. Let's assume that each restaurant in your system has a RestaurantID and when it's tapped on it will open up the restaurant details. We want this behavior to occur when a user taps on a shared restaurant within a group chat too.


So start off by adding a share button to your restaurant details activity/view.



Handle the onclick of that share button like so, notice we'll use Message Type 101 (any type > 100 will work). We've included the Restaurant title and a picture for the chat, and the RestaurantID is saved in the withURL field. The 'withURL' field is the var1 wildcard that can be anything like a URL or ID and will be used to handle the onClick functionality:


-(void)shareContent:(id)sender
{
    GCSharedObject *sharedObj = [[GCSharedObject alloc]
        initWithContent:101
        withTitle:@"Michael Jordan Steakhouse"
        withSubtitle:@""
        withImageURL:@"http://ourrestaurants.com/images/michaeljordans.png"
        withURL:@"RestaurantID1234"
        withDate:@""
        withDetails:@""
        withMarkup:@""];

    GCShareSelector *groupsVC = [[GCShareSelector alloc]
        initWithContent:sharedObj];
    [self.navigationController pushViewController:groupsVC animated:YES];
    [groupsVC release];
    [sharedObj release];
}

Now the second part, handling the ontap functionality of the Restaurant message type.


1) Open the group details view controller in the SDK, GCGroupDetailsVC.m


2) Find the -tableView:didSelectRowAtIndexPath function and you will see toward the end of it a commented area for CUSTOM OBJECT CODE HERE


3) Add your custom object on tap function in here. Following our restaurant example:


if (messageSelected.type == 101) {  //your custom object TYPE
    //Take the values from the messageSelected and pass them to a view controller
        //of your own to process.
    //You can pass the GCObject object messageSelected.object which
        //contains all the message content
    //or you can pass the values individually if you want (all are strings):
    //messageSelected.object.imageURL;
    //messageSelected.object.var1;
        //(var1 is a wildcard usually used for a url or object id)
    //messageSelected.object.varTitle;
    //messageSelected.object.varSubtitle;
    //messageSelected.object.varDateString;
    //messageSelected.object.varDetails;
    //messageSelected.object.varMarkup;

    int restaurantID = messageSelected.object.var1;
    restaurantDetailsVC *controller = [[GCWebBrowserVC alloc]
        initWithRestaurantID:restaurantID];
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
}


Notice that you can access all the message data in step 3. So if you had for example a concert schedule and it was marked up in XML, well you could make a custom message object and access the data through these methods and then its up to you to render your object when a user taps it.







Integrate Groups into your own UI


1) "Getting Started in 5 Minutes" had you add a 'My Groups' button that fires off a new view controller. This section is for integrating the Groups view controller into your own view controller. So at this point you should have a 'My Groups' button...




2) Add an empty View somewhere to display the list of Groups in your current view controller. Call this view 'groupsView'




3) In viewDidLoad or viewWillAppear add the following


groupsVCFromSDK = [[GCViewController alloc] init];
groupsVCFromSDK.delegate = self;
groupsVCFromSDK.view.frame = self.groupsView.bounds;
[self.groupsView addSubview:groupsVCFromSDK.view];
[groupsVCFromSDK didMoveToParentViewController:self];
[self addChildViewController:groupsVCFromSDK];


4a) Make a function for tapping on 'My Groups'. You'll want to bring the 'groupsView' to the front. For example in this GroupSquare app:


[self.view sendSubviewToBack:aboutView];
[self.view sendSubviewToBack:placesView];
[self.view bringSubviewToFront:groupsView];


4b) In that same 'My Groups' onclick function add this line:


[self parentUpdateGroupNotificationsCount];


5) Add the following functions. These are to handle the in-app notifications for new/updated groups and any messages you push to your users through our dashboard. The notifications are displayed in a tableview that appears when the user taps on the notifications button in the top right of the navigation controller. That button also contains the count of new/unread notifications.


- (void)parentUpdateGroupNotificationsCount {
    /*update the group notifications new/unread
    count on the button in the nav controller*/

    /*this function is also called via the GroupsViewController
    delegate so that the new/unread count is updated when
    a new notification comes in*/

    int unreadCount = 0;

    NSMutableArray *notifications = groupsVCFromSDK.getNotificationsFromParent;
    // Go through each notification to see if there is an unread message
    for (GCNotification *entry in notifications) {
        if (entry.unread) {
            unreadCount++;
        }
    }

    //create the notifications button
     UIButton *notificationButton =
        [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 43, 31)];

    //set the background image of the notifications button pending if 0 or not
    if (unreadCount > 0) {
        [notificationButton setBackgroundImage:[UIImage
            imageNamed:@"gc_topsmallbtnblue.png"] forState:UIControlStateNormal];
    } else {
        [notificationButton setBackgroundImage:[UIImage
            imageNamed:@"gc_topsmallbtn.png"] forState:UIControlStateNormal];
    }

    //set the navigation right button to the notification button
    [notificationButton setTitle:[NSString stringWithFormat:@"%i",
        unreadCount] forState:UIControlStateNormal];
    [notificationButton setTitleColor:[UIColor whiteColor]
        forState:UIControlStateNormal];
    notificationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16];
    notificationButton.titleLabel.shadowColor = [UIColor blackColor];
    notificationButton.titleLabel.shadowOffset = CGSizeMake(0, -1);
    [notificationButton addTarget:self action:@selector(openNotifications)
        forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *rightBut = [[UIBarButtonItem alloc]
        initWithCustomView:notificationButton];
    self.navigationItem.rightBarButtonItem = rightBut;
    [rightBut release];
    [notificationButton release];
}

- (void)openNotifications {
    // Display the group notifications in a modal view controller

    // Set up controller
    NSMutableArray *notifications = groupsVCFromSDK.getNotificationsFromParent;
    GCNotificationsVC *controller = [[GCNotificationsVC alloc]
        initWithNotifications:notifications];

    // Set up navigation
    UINavigationController *navCntrl = [[UINavigationController alloc]
        initWithRootViewController:controller];

    // Show view
    [self presentModalViewController:navCntrl animated:YES];

    [controller release];
    [navCntrl release];
}


6) In the .h header of your view controller, include the following delegate


@interface YOURViewController: UIViewController <..., GroupsViewControllerDelegate>

Also declare the Groups view controller:


GCViewController *groupsVCFromSDK;


So now when you build your app you should see your groups integrated into your main view controller when you tap the 'My Groups' button.


You should also see the notifications button in the navigation controller when you tap on 'My Groups' too.





Setting up Push Notifications


Note: Currently to get push notifications to groups in your app, we require you setup an Urban Airship account. We are developing our own push notification services, but currently only support working with Urban Airship.


Setup an Urban Airship account

Go to Urban Airship and register for an account. Urban Airship is an experienced push notification service provider and their basic package is FREE.


Once you've setup an account, add an app to your account. Be sure to select 'Push Enabled'


Next add your Apple push certificate for your app. If you don't have one yet, go to your Apple developer account, and in the Provisioning Portal you can configure your app for push notifications and get your certificate. Once you download it from to your computer, in Keychain Access export it to a .p12 before uploading to Urban Airship. Great documentation on this can be found here


Now you will see your Urban Airship credentials.


Copy your credentials into the Groupcentric Developer Dashboard



Setup your app (3 steps)

1) In your AppDelegate, initialize the GroupcentricSDK with this line; notice the andUrbanAiship parameter


[GroupcentricSDK initFrameworkWithAPIKey:@"YOUR_API_KEY" andUrbanAirship:launchOptions];

2) Add/Update the following in your AppDelegate


- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken
{
    // Store the new token with Groupcentric
    [[Groupcentric sharedInstance] saveDeviceToken:newDeviceToken];

    if ([application enabledRemoteNotificationTypes] == UIRemoteNotificationTypeNone)
    {
        NSLog(@"Notifications are disabled for this application.");
        return;
    }
}

- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    if ([error code] == 3010) {
        NSLog(@"Push notifications don't work in the simulator!");
    } else {
        NSLog(@"Failed to register with error: %@", error);
    }
}

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" object:self];
}

3) In Xcode, inside the GroupcentricSDK.embeddedFramework folder, open the Resources folder and you will see a AirshipConfig.plist file. You will need to add your credentials to this file.


APP_STORE_OR_AD_HOC_BUILD  set to YES or NO (prod or dev)
DEVELOPMENT_APP_KEY = Your Development App Key
DEVELOPMENT_APP_SECRET = Your Development App Secret
PRODUCTION_APP_KEY = Your Production App Key
PRODUCTION_APP_SECRET = Your Production App Secret


If you already use Urban Airship (3 steps)

1) Add the following code to didRegisterForRemoteNotificationsWithDeviceToken in your AppDelegate:


[[Groupcentric sharedInstance] saveDeviceToken:newDeviceToken];

2) The Groupcentric SDK depends on notifications from the NSNotificationCenter with a name of @"refresh". So in didReceiveRemoteNotification within your AppDelegate please make sure to use postNotificationName:@"refresh"


- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" object:self];
}

3) Remove the airshipconfig.plist from the GroupcentricSDK.embeddedFramework folder so you don't have any duplicates.






Our example is Eventcentric


Eventcentric is a Eventbrite event listings app with Groupcentric group chat.


The concept is simple; find an event and share it into one of your groups.


Events are shared as type 4 message objects in this app.


You can get the project source here on our Github page.



Select an event...



Tap the share button in event details...



Select a group of yours to share with...



Add a message with the event...



Now everyone in your group can check it out!






Demos

  • Groupcentric
  • Mohegan Sun
  • Eventcentric
  • Across Apps

The flagship app that uses the Groupcentric SDK. This video shows some of the rich content sharing built into the SDK by default. [Length 1:33]

iPhone

  • Overview
  • How to implement
  • Examples

Adding group chats to your website

Allow web site visitors to invite and group chat with their friends on your website by adding 1 line of JavaScript. GroupCentric provides a persistant group chat window (similar to a Facebook or Google messenger window) that sits on top of your website in the bottom right hand corner.

When a visitor arrives at your website they will see a 'Ask friend to go' button that onclicked will display a new group chat form in the bottom right hand corner of the screen. For those invited to a group chat on your website, the url invite they recieve has an encrypted parameter that tells GroupCentric to load up the group chat in the corner immediately on page load (no clicking or logging in).






The group chat window is injected through an iframe opened with the 1 line of JavaScript you need to add to your website. Groupcentric stores a cookie in any of your web site visitors browsers when they use the group chat so when they return to your website they may continue chatting; keeping the group chat persistent.



1 line of JavaScript

The 1 line of JavaScript tells GroupCentric to load up the group chat window and passes some customizable parameters with it. The parameters are the following:

title - title of the web page like 'Mohegan Sun Boxing'; something relevant to people getting invited to this chat
pic100 - the url to a 100px x 100 px image associated with the web page. Following our boxing example perhaps a picture of a boxing glove.
mainLabel - the label on the button displayed on your webpage. Default is 'Ask friends to go'.
buttonColor - the color of the button displayed on your webpage in hex; example ff7200.
deal - if you're a restaurant or bar owner or event promoter and you want to incentivize web site visitors to invite friends to make plans to your place, then you can include a custom message like 'Come with 3 friends and get 5% off your bill'.
dealtagColor - color of the deal tag thats attached to the bottom of the main button.

The 1 line of JavaScript initially renders as a button on your website to entice visitors to click it to start a group chat with friends. Wherever you place this line of JavaScript in your html will cause the button to render at that position. It's usually helpful to surround the JavaScript with a styled div. For example:

<div style="display: inline-block;vertical-align: top;margin-top:3px;line-height:1.5em">

<script type="text/javascript" src="http://www.groupcentric.com/widget.aspx?title=Treehouse Comedy Productions&pic100=http://www.shizzlr.com/images/bartypes/bar.jpg&mainLabel=Ask friends to go&type=2&buttonColor=ff7200&dealtagColor=555555&deal=Come on Friday with 3 friends and get 4 free pizza slices"></script>
</div>

Some websites using the widget

will have to copy the widget examples from shizzlr to gc and put the links w descriptions as 'use cases' here for now

@GROUPcentric
Putting together the final pieces of what is to be an amazing splash page.
Yesterday
Built by Shizzlr 2013