2016-10-26 10 views
3

私はユーザーがFacebookやTwitter経由で記事を共有できるAndroidアプリケーションを開発中です。 Facebookの共有はShareDialogを使ってうまくいきます。これは私のアプリケーションでFacebookの共有ダイアログを開きます。TwitterアプリケーションなしのAndroidアプリケーションからのTweeting

私が持っている問題は、Twitterに投稿することです。ユーザーにTwitterアプリがインストールされている場合、共有は完全に機能します。デバイスにTwitterアプリケーションがインストールされていない場合、デフォルトのブラウザにTwitter共有ページが開かれ、ツイートした後にユーザーがアプリケーションに返されることはありません。

つぶやきの投稿のための私のコードは次のとおりです。私も、この試みている

Intent intent = new TweetComposer.Builder(context).text("Tweet text.").createIntent(); 
startActivityForResult(intent, SHARE_ACTION_TWITTER); 

TweetComposer.Builder builder = new TweetComposer.Builder(this).text("Tweet text."); 
builder.show(); 

をするとき(Facebookのシェアの挙動と同様に)自分のアプリケーションでダイアログを取得する方法はありますユーザーにはTwitterアプリがインストールされていませんか?

また、統計については、ユーザーが正常にツイートを投稿したかどうかを知りたいと思います。ユーザーがTwitterアプリをインストールしていない場合、Fabric Twitter APIでこれをどのように実現できますか?別のAPIを使用する必要がありますか?

答えて

3

解決策は、ツイートするためのカスタムWebviewを作成することでした。 Fabric Twitter APIは必要ありません。

最も重要な部分は、WebViewのアクティビティを作成することです:

public class TweetCustomWebView extends AppCompatActivity { 

    android.webkit.WebView webView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview_activity); 

     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      final String stringToShow = extras.getString("tweettext"); 
      webView = (android.webkit.WebView) findViewById(R.id.wv); 

      webView.setWebViewClient(new WebViewClient() { 
       public boolean shouldOverrideUrlLoading(android.webkit.WebView view, String url) { 
        if (url.contains("latest_status_id=")) { 
         // Twitted 
         setResult(Activity.RESULT_OK, new Intent()); 
         TweetCustomWebView.this.finish(); 
        } 
        view.loadUrl(url); 
        return true; 
       } 

       public void onPageFinished(android.webkit.WebView view, String url) { 
        // Finished loading url 
       } 

       public void onReceivedError(android.webkit.WebView view, int errorCode, String description, String failingUrl) { 
        Log.e("", "Error: " + description); 
        setResult(Activity.RESULT_CANCELED, new Intent()); 

       } 
      }); 
      webView.loadUrl("https://twitter.com/intent/tweet?text=" + stringToShow); 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     setResult(Activity.RESULT_CANCELED, new Intent()); 
    } 

} 

そして、このようなレイアウト:私たちがしなければならないのAndroidManifest.xmlで

<WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/wv"/> 

の中にウェブビューのアクティビティを追加するタグ:

<activity android:name=".TweetCustomWebView" /> 

最後のステップは、ユーザーがTwitterのボタンにシェアをタップしたときに、私たちvebviewを呼び出すことです:

Intent intent = new Intent(MainActivity.this, TweetCustomWebView.class); 
intent.putExtra("tweettext", "Text to tweet"); 
startActivityForResult(intent, 100); 

それれるべきであること。これが誰かを助けることを願っています。

3

ステータスをtwitter.itに投稿するには、以下のコードを使用してください。twitterの残りのAPI呼び出し: 私は自分のアプリケーションから正常に共有しています。ツイッターアプリをインストールする必要はありません。

TwitterAuthClient mTwitterAuthClient = new TwitterAuthClient(); 
    mTwitterAuthClient.authorize(this, new Callback<TwitterSession>() { 
       @Override 
       public void success(Result<TwitterSession> result) { 
        TwitterSession session = result.data; 
        twitterApiClient = TwitterCore.getInstance().getApiClient(session); 
        statusesService = twitterApiClient.getStatusesService(); 

          postToTwitter("here goes your share message to post status"); 
         } 
        } 

public void postToTwitter(String Message) { 
     String message; 

     StatusesService statusesService = twitterApiClient.getStatusesService(); 
     statusesService.update(message, null, null, null, null, null, null, null, mediaId, new Callback<Tweet>() { 
      @Override 
      public void success(Result<Tweet> result) { 
       //handle success case 
      } 

      @Override 
      public void failure(TwitterException exception) { 
       //handle failure case 

      } 
     }); 
    } 
+0

「mediaId」とは何ですか? 'statusesService.update'の' new Callback () 'パラメータがエラーを返します。 'update'メソッドはこの最後のパラメータを受け入れないようです。 – cakan

+0

イメージを投稿する必要がある場合はmediaid otherwizeを使用してください –

+0

私はnullにしましたが、 'mediaId'の後に' new Callback () 'パラメータがエラーを投げています。 – cakan

0

私は正しい答えは、更新ステータスAPI呼び出しを使用していると思います。 私は、最新のTwitterのSDKのバージョンを使用しています:com.twitter.sdk.android:twitter:3.1.1

public void publishTwitter(final String message) { 
    final TwitterApiClient apiClient = TwitterCore.getInstance().getApiClient(); 
    final StatusesService statusesService = apiClient.getStatusesService(); 
    final Call<Tweet> update = statusesService.update(message, null, null, null, null, null, null, null, null); 
    update.enqueue(new com.twitter.sdk.android.core.Callback<Tweet>() { 
     @Override 
     public void success(Result<Tweet> result) { 
      Log.d("TweetTest", "Tweet generated"); 
     } 

     @Override 
     public void failure(TwitterException exception) { 
      Log.e("TweetTest", exception.getLocalizedMessage()); 
     } 
    }); 
} 


NOTE
ユーザーは、このAPIコールを呼び出す前に認証を受ける必要があります。 詳細については、Twitter Devフォーラムのthis postをチェックしてください。

お礼

関連する問題