How to get listed in the iOS 8 system wide share menu?

眉间皱痕 提交于 2019-12-06 16:02:18

问题


I'm trying to get my iOS 8 app listed in the iOS 8 system wide share menu for the image extensions .png, .jpg (.jpeg), .gif (static). What do I need to add to the info.plist file? I tried the code below from the iOS docs example but that didn't work, my app isn't showing up in the share list.

<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionServiceRoleType</key>
<string>NSExtensionServiceRoleTypeEditor</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.ui-services</string>
<key>NSExtensionPrincipalClass</key>
<string>ActionViewController</string>
</dict>

To make it clear, this is the iOS 8 Share Menu (also known as share sheet) I mean: http://cdn1.tekrevue.com/wp-content/uploads/2014/09/ios8-share-sheets-customize.jpg


回答1:


You are missing the NSExtensionActivationRule. See Apple's Extension programming guide: Declaring Supported Data Types for a Share or Action Extension

For example, to declare that your Share extension can support up to ten images, one movie, and one webpage URL, you might use the following dictionary for the value of the NSExtensionAttributes key:

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>10</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>



回答2:


First thing first, you need to understand about inter-app communication. What you need is custom url scheme for your app. Please Refer : https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html

Now after you have a custom url sheme, proceed as follows:

To get listed in the system wide share menu,You need to make a custom Activity.

Make a class like the following: In the YourActivity.h file

@interface YourActivity : UIActivity
-(void)someInitialisationMethod:(NSString*)string;
@end

and in the YourActivity.m file

#import "YourActivity.h"

@implementation YourActivity

- (NSString *)activityType
{
return @"UIActivityCategoryShare";
}

- (NSString *)activityTitle
{ // here give the title of your app or the action name that it performs
return @"YourAppName";
}
+ (UIActivityCategory)activityCategory
{// there are two types of category- share and action
return UIActivityCategoryShare;
}
- (UIImage *)activityImage
{
// Note: These images need to have a transparent background and I recommend these sizes:
// iPadShare@2x should be 126 px, iPadShare should be 53 px, iPhoneShare@2x should be 100
// px, and iPhoneShare should be 50 px. I found these sizes to work for what I was making.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    return [UIImage imageNamed:@"YourActivityImage.png"];
}
else
{
    return [UIImage imageNamed:@"YourActivityImage.png.png"];
}
}

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
{
NSLog(@"%s", __FUNCTION__);
return YES;
}

- (void)prepareWithActivityItems:(NSArray *)activityItems
{
NSLog(@"%s",__FUNCTION__);
}

- (UIViewController *)activityViewController
{
NSLog(@"%s",__FUNCTION__);
return nil;
}

- (void)performActivity
{
// This is where you can do anything you want, and is the whole reason for          creating a custom
// UIActivity
NSURL *yourCustomURLMaybe = [NSURL URLWithString:someInitialisedString];
if ([[UIApplication sharedApplication] canOpenURL: yourCustomURL]) {
    [[UIApplication sharedApplication] openURL: yourCustomURL];
}
else
{
    NSLog(@"YourActivity not found");
}
[self activityDidFinish:YES];
}

@end

Now that your custom activity is made You need to fire it up with share menu like this

NSString *yourCustomUrl = [NSString stringWithFormat:@"YourCustomURLScheme?..."];

NSString *escapeAdded = [yourCustomUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *finalCustomURL = [NSURL URLWithString:escapeAdded];

YourActivity *ca;
if ([[UIApplication sharedApplication] canOpenURL: finalCustomURL])
{
    ca = [[YourActivity alloc]init];
}
else
{
    ca = nil;
}

NSArray *applicationActivityArray = [[NSArray alloc] initWithObjects:ca,nil];

Finally, When you present the share box, add the above array to application Activities:

activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[...] applicationActivities:applicationActivityArray];
}


来源:https://stackoverflow.com/questions/28506219/how-to-get-listed-in-the-ios-8-system-wide-share-menu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!