2017-10-13 13 views
0

私は昨日からFirebase Dynamicリンクで作業していました。インテントフィルタ配置を変更した場合、ディープリンクは見つかりません

これは私の主な活動です:

private GoogleApiClient mGoogleApiClient; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button = (Button) findViewById(R.id.button); 


     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(AppInvite.API) 
       .build(); 


     boolean autoLaunchDeepLink = true; 
     AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink) 
       .setResultCallback(
         new ResultCallback<AppInviteInvitationResult>() { 
          @Override 
          public void onResult(@NonNull AppInviteInvitationResult result) { 
           if (result.getStatus().isSuccess()) { 





            try { 
             deepLink = URLDecoder.decode(deepLink, "UTF-8"); 
            } catch (UnsupportedEncodingException e) { 
             e.printStackTrace(); 
            } 
            Uri uri = Uri.parse(deepLink); 
            // String requestId = uri.getQueryParameter("requestID"); 
            String requestId2 = uri.getQueryParameter("extra1"); 
            Log.v("EXTRA PARAMETER ",requestId2); 

            if(requestId2 == "value") { 
             intent = new Intent(getApplicationContext(), Main2Activity.class); 

             startActivity(intent); 
            } 
            // ... 
           } else { 
            Log.d("string ", "getInvitation: no deep link found."); 

           } 
          } 
         }); 


     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       Uri BASE_URI = Uri.parse("http://example.com/"); 

       Uri APP_URI = BASE_URI.buildUpon(). 
         appendQueryParameter("extra1", "value").build(); 


       String encodedUri = null; 
       try { 
        encodedUri = URLEncoder.encode(APP_URI.toString(), "UTF-8"); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
       Uri deepLink = Uri.parse("https://eh62u.app.goo.gl/y6N7/?link="+encodedUri); 
       Intent intent = new Intent(Intent.ACTION_SEND); 
       intent.setType("text/plain"); 
       intent.putExtra(Intent.EXTRA_EMAIL, ""); 
       intent.putExtra(Intent.EXTRA_SUBJECT, "GET TICKETS"); 
       intent.putExtra(Intent.EXTRA_TEXT, "Click here to get the booked tickets: " + deepLink); 

       startActivity(Intent.createChooser(intent, "Send Email")); 
      } 
     }); 
    } 


    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {} 

    } 

私はディープリンクがクリックされたときの意図を使用してMain2Activityを開始したかったです。 Androidのマニフェスト:

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

      <intent-filter> <action android:name="android.intent.action.VIEW"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
       <category android:name="android.intent.category.BROWSABLE"/> 
       <data 
        android:host="example.com" 
        android:scheme="https"/> 
      </intent-filter> 



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

     </activity> 
    </application> 

今、私はMain2Activityでディープリンクインテントフィルタを入れた場合、私はリンクをクリックしたときに、それが直接Main2Activityを開き、主な活動に入らないとはonResultが呼び出されません。しかし、今では主な活動にインテントフィルタを入れているので、深いリンクは見つかりませんでした。

+0

Main2Activityクラスには全く何もありません – L3G3NDj

答えて

0

あなたのコードは古いバージョンだと思います。 firebase dynamicLinkを使用すると、新しいバージョンがよりシンプルになります。

FirebaseDynamicLinks.getInstance() 
      .getDynamicLink(getIntent()) 
      .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { 
       @Override 
       public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { 
        // Get deep link from result (may be null if no link is found) 
        Uri deepLinkUri = null; 
        if (pendingDynamicLinkData != null) { 
         deepLinkUri = pendingDynamicLinkData.getLink(); 
        } 
        if(deepLinkUri != null){ 
         // String requestId = deepLinkUri.getQueryParameter("requestID"); 
         String requestId2 = deepLinkUri.getQueryParameter("extra1"); 
         Log.v("EXTRA PARAMETER ",requestId2); 

         if(requestId2 == "value") { 
         intent = new Intent(getApplicationContext(), Main2Activity.class); 

         startActivity(intent); 
         } 
         // ... 
        } else { 
         Log.d("string ", "getDynamicLink: no deep link found."); 
        } 
      }) 
      .addOnFailureListener(this, new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception e) { 
        Log.d("string ", "getDynamicLink:onFailure", e); 
       } 
      }); 

詳しいチュートリアルでは、活動のonNewIntentとして内部deeplinkを処理する必要がありquickstart here

+0

Firebaseのアシスタントからコードを入手しました。コードは時代遅れであるにもかかわらず、正常に機能していたはずです。 – L3G3NDj

+0

古いバージョンとは何が関係していますか? – L3G3NDj

+0

Firebaseチームは開発者の生活を楽にするために、すべての力を入れています。なぜ古いバージョンを使用して彼らの努力を無駄にしていますか?私はGoogleのAPIを使用するために間違いがない場合は、私たちはGoogleのクラウドコンソールで有効にする必要がありますし、APIキーなどを作成します。 – faruk

0

で読み取ることができます:ドキュメントは、おそらくのonCreateにこのコードを入れて、あなたのメインの活動でhere

、で読み取ることができますよく:

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(getLayoutId()); 
    receiveDeeplinkIfHave(); // detect your deeplink here 
} 
@Override 
protected void onNewIntent(final Intent intent) { 
     super.onNewIntent(intent); 
     receiveDeeplinkIfHave(); // detect your deeplink here 
} 
関連する問題