2017-10-13 1 views
0

Ich arbeite seit gestern an Firebase Dynamic Links.Kein Deep Link gefunden, wenn ich die Intent-Filterplatzierung ändere

Das ist meine Haupttätigkeit:

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) {} 

    } 

Ich war Main2Activity mit Absicht, wenn der tiefe Link geklickt starten wollte. Android Manifest:

<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> 

Nun, wenn ich die tiefe Verbindung Intent-Filter in Main2Activity setzen, wenn ich auf den Link klicken, es öffnet sich direkt Main2Activity und geht nicht in Hauptaktivität und onResult wird nicht aufgerufen. Aber jetzt, da ich den Intentfilter in Hauptaktivität gesetzt habe, heißt es noch kein Deep Link gefunden.

+0

Main2Activity Klasse hat absolut nichts drin – L3G3NDj

Antwort

0

Ich denke, Ihr Code ist eine alte Version. Die neue Version ist einfacher mit Firebase DynamicLink. Die Dokumentation kann in here

In Ihrer Haupttätigkeit, vielleicht in onCreate lesen setzte diesen Code:

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); 
       } 
      }); 

Mehr Tutorial können Sie in quickstart here

+0

Ich habe meinen Code vom Firebase-Assistenten erhalten. obwohl der Code veraltet ist, hätte es funktionieren sollen, nicht? – L3G3NDj

+0

Was hat die alte Version damit zu tun? – L3G3NDj

+0

Das Firebase-Team setzt alles daran, das Leben von Entwicklern einfacher zu machen. Warum verschwenden sie ihre Mühe mit der alten Version? Außerdem, wenn ich nicht falsch bin, um Google API zu verwenden, müssen wir es in Google Cloud-Konsole aktivieren, und dann einen API-Schlüssel, etc .. – faruk

0

gelesen werden sollen deeplink in der Tätigkeit des Griff onNewIntent als gut:

@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 
}