私のプロジェクトでは、常にSLComposeViewController
を使用してサードパーティアプリとコンテンツを共有しますが、iPhoneをiOS 11ベータ版に更新すると、これは機能しなくなりました。
SLComposeViewControllerCompletionHandler
は常にSLComposeViewControllerResultCancelled
をコールバックします。
どうしてこれなの?
私はiOS 11のSLComposerに関して問題を抱えていました。しかし、チェックする行を削除しただけで、明らかに自分のSDKが内部的に妥当性を確認します。
SLServiceType
に役立つこの行を削除します。
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
したがって、ロジックを開発します。私の場合:
SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[mySLComposerSheet setInitialText:@"#myInitialTextIsHere"];
[mySLComposerSheet addURL:[NSURL URLWithString:strURL]];
[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
switch (result) {
case SLComposeViewControllerResultCancelled:
NSLog(@"Post Canceled");
break;
case SLComposeViewControllerResultDone:
NSLog(@"Post Sucessful");
break;
default:
break;
}
}];
[self presentViewController:mySLComposerSheet animated:YES completion:nil];
お役に立てば幸いです!
iOS 11は、設定アプリからサードパーティアカウント(FacebookやTwitterなど)へのアクセスを削除しました。私は現在、同じことに苦労しています。
ここで、サードパーティのSDKと機能を統合する必要があります。 Twitterには、実行する手順に関する移行ページがあります。
https://dev.Twitter.com/twitterkit/ios/migrate-social-framework
他のソーシャルネットワークを移行する方法に関する具体的な手順はまだ見つけていませんが、サードパーティのSDKが必要になると言っても差し支えありません。
これ以上の簡単なすぐに使えるソーシャル共有はありません:-(
IOS 11の場合、次の行:
([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
常にNO
を返します
ユーザーにFacebookアプリがインストールされているかどうかをチェックに置き換えました:
static NSString *const canOpenFacebookURL = @"fbauth2";
+ plistのLSApplicationQueriesSchemes
に追加
-(BOOL)isFacebookAppInstalled {
NSURLComponents *components = [[NSURLComponents alloc] init];
components.scheme = canOpenFacebookURL;
components.path = @"/";
return [[UIApplication sharedApplication]
canOpenURL:components.URL];
}
そして、SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
を呼び出すだけです
いつものように、マテウス・ドミンゴスが説明したのと同じ。しかし、少なくともこのチェックでは、ユーザーがFacebookアプリをインストールしていることがわかります。