This library provides a UIActivity subclass for Google+ sharing. It uses the native share builder API from the official Google+ iOS SDK for sharing, and the GPPSignIn API for signing in.
Below are detailed instructions for integrating and using the library in your iOS app.
There are also example projects for Swift and Objective-C in the Examples
directory.
Installation through CocoaPods is recommended:
pod 'GooglePlusShareActivity'
Note: In CocoaPods 0.36 there is an issue that prevents using this library if you enable use_frameworks!
in your Podfile. See also #11.
If your app is written in Swift, you must import some header files in your Objective-C bridging header.
#import <GooglePlus/GooglePlus.h>
#import <GooglePlusShareActivity/GPPShareActivity.h>
You can find more information about Objective-C pods in Swift apps here.
Follow Steps 1 and 3 of the Google+ iOS SDK Getting Started instructions to
- Create an APIs Console project, and
- Add an URL Type to your iOS app.
In an appropriate place, initialize the Google+ Sign In API by providing your APIs Console project's client id:
#import <GooglePlus/GooglePlus.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// initialize Google+ Sign In API
[GPPSignIn sharedInstance].clientID = @"xxxxxxxxxxxx.apps.googleusercontent.com";
// ...
return YES;
}
Your AppDelegate
must also forward the Google+ Sign In callback URL to GPPSignIn
:
@implementation AppDelegate
// ...
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// handle Google+ Sign In callback URL
return [[GPPSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
Add a GPPShareActivity
to your UIActivityViewController
.
It accepts a string and either an image or a URL. You can also create and customize your own share builder.
#import <GooglePlusShareActivity/GPPShareActivity.h>
- (void)actionButtonTapped:(UIBarButtonItem*)sender
{
// set up items to share, in this case some text and an image
NSArray* activityItems = @[ @"Hello Google+!", [UIImage imageNamed:@"example.jpg"] ];
// URL sharing works as well. But you cannot share an image and a URL at the same time :(
NSArray* activityItems = @[ @"Hello Google+!", [NSURL URLWithString:@"https://github.com/lysannschlegel/GooglePlusShareActivity"] ];
// You can also set up a GPPShareBuilder on your own. All other items will be ignored
id<GPPNativeShareBuilder> shareBuilder = (id<GPPNativeShareBuilder>)[GPPShare sharedInstance].nativeShareDialog;
[shareBuilder setPrefillText:@"Hello Google+!"];
[shareBuilder setURLToShare: [NSURL URLWithString:@"https://github.com/lysannschlegel/GooglePlusShareActivity"]];
NSArray* activityItems = @[ @"Does not appear", shareBuilder ];
// set up activity
GPPShareActivity* gppShareActivity = [[GPPShareActivity alloc] init];
gppShareActivity.canShowEmptyForm = YES;
// ...
}
Setting canShowEmptyForm
to YES
will display the Google+ share activity even if no item is recognized as sharable with the activity. In this case, an empty form is shown, and the user can add text to it. (Default is NO
, i.e. the activity is not included in the activity view.)
If you want to support iOS 7 and below, presenting an UIActivityViewController is a bit tricky:
// set up and present activity view controller
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:@[gppShareActivity]];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// present in popup
self.activityPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
gppShareActivity.activityPopoverViewController = self.activityPopoverController;
[self.activityPopoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
} else {
// present modally
gppShareActivity.activitySuperViewController = self;
[self presentViewController:activityViewController animated:YES completion:NULL];
}
Setting activityPopoverViewController
or activitySuperViewController
allows you to dismiss the popover controller or modal view controller before the Google+ share view is shown.
You should also consider dismissing self.activityPopoverController
if the action is triggered again while the popover is visible.
While the code above works on iOS 8 as well, it can be simplified if you target only iOS 8 and later:
// set up and present activity view controller
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:@[gppShareActivity]];
activityViewController.popoverPresentationController.barButtonItem = sender;
[self presentViewController:activityViewController animated:YES completion:NULL];
Do not change the delegates of GPPSignIn
and GPPShare
while the activity is active. GPPShareActivity
must be informed about sign in and sharing progress.
If you want to be a delegate as well, assign your delegates before starting the activity. GPPShareActivity
will override the current delegates while performing the activity and forward all notifications to the orignal delegates.
It's MIT. See LICENSE file.