【发布时间】:2013-01-04 00:38:29
【问题描述】:
我希望能够跟踪用户是否通过 facebook、twitter 等共享,但似乎无法知道选择了哪种方法。有没有?
【问题讨论】:
-
总是很高兴看到我要问的问题。
我希望能够跟踪用户是否通过 facebook、twitter 等共享,但似乎无法知道选择了哪种方法。有没有?
【问题讨论】:
您可以在 setCompletionHandler 中使用 Activity 类型
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
if([activityType isEqualToString: UIActivityTypeMail]){
NSLog(@"Mail");
}
if([activityType isEqualToString: UIActivityTypePostToFacebook]){
NSLog(@"Facebook");
}
}];
[self presentViewController:activityVC animated:TRUE completion:nil];
系统内置支持的内置活动类型。
NSString *const UIActivityTypePostToFacebook;
NSString *const UIActivityTypePostToTwitter;
NSString *const UIActivityTypePostToWeibo;
NSString *const UIActivityTypeMessage;
NSString *const UIActivityTypeMail;
NSString *const UIActivityTypePrint;
NSString *const UIActivityTypeCopyToPasteboard;
NSString *const UIActivityTypeAssignToContact;
NSString *const UIActivityTypeSaveToCameraRoll;
针对 iOS 8 编辑
请注意,这将在 iOS 8 中生成编译器警告,您需要使用 setCompletionWithItemsHandler 方法而不是 setCompletionHandler 方法。
替换:
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
与:
[activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
【讨论】:
UIActivityItemSource 协议的自定义数据对象。然后,您可以以特定于活动类型的格式显示数据(或仅跟踪类型)。 NSHipster 有所有细节。
在 Swift 4 中:
activityViewController.completionWithItemsHandler = { activity, success, items, error in
if !success{
print("cancelled")
return
}
if activity == .postToTwitter {
print("twitter")
}
if activity == .mail {
print("mail")
}
}
【讨论】:
迅速 3
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [screenCapture], applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo]
activityViewController.completionWithItemsHandler = { activity, success, items, error in
if !success{
print("cancelled")
return
}
if activity == UIActivityType.postToFacebook {
print("facebook")
}
if activity == UIActivityType.mail {
print("mail")
}
}
self.present(activityViewController, animated: true, completion: nil)
【讨论】:
您可以使用这个库https://github.com/rdougan/RDActivityViewController 来识别哪些活动已被触及,并仅通过实现其协议来按活动返回自定义数据。
像这样:
- (NSArray *)activityViewController:(NSArray *)activityViewController itemsForActivityType:(NSString *)activityType
{
if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
return @[@"Twitter text"];
} else if ([activityType isEqualToString:UIActivityTypeMessage]) {
return @[@"Message text"];
} else if ([activityType isEqualToString:UIActivityTypeMail]) {
return @[@"Mail text"];
} else if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
return @[@"Facebook text"];
} else {
return @[@"Default text"];
}
}
希望对你有所帮助!
【讨论】: